丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0


丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0

警告

您當前查看的頁面是未經授權的轉載!
如果當前版本排版錯誤,請前往查看最新版本:http://www.cnblogs.com/qin-nz/p/aspnetcore-run-on-mono-in-year-of-monkey.html

提示

更新時間:2016年02月07日。

各位程序媛/程序猿們,猴年快樂。 相信不少媛/猿都是被標題吸引來的,那我我先解釋下標題。

提示

本文是一篇半科普文,不對技術細節進行深入探究。

標題解釋

ASP.NET Core 1.0

ASP.NET Core 1.0 是一個是跨平台開源的用於開發網站/Web API 的框架, 原名 ASP.NET 5 (再早期稱作 ASP.NET vNext),但並不是 ASP.NET 4.6 的升級版;而是從零開始的版本。

ASP.NET Core 1.0 把所有的功能和模塊都進行了拆分,進行了徹底解耦。 源代可以在 Github ASP.NET 上找到。

容器

容器技術是一種虛擬化技術,和虛擬機不同的是:容器技術不會提供一整個操作系統,它只能提供隔離的程序運行環境; 容器技術對系統資源的消耗要遠小於虛擬機。

Docker 是一個開源的應用容器引擎,他不需要對內核進行改變,他主要利用操作系統內核特性實現虛擬化,所有容器運行在同一個內核中。

注解

所有容器運行在同一個內核中,意味着所有容器必須和操作系統相匹配,Windows容器不能直接運行在Linux上。

猴子

猴子 是西班牙語單詞 mono翻譯 , 西班牙語中,這個詞同時還有可愛的意思。

而我想表達的意思是 Mono Project

因此,本文的意思是:在2016年創建一個包含Mono運行環境的Docker容器,然后啟動兩個實例,讓它們給你運行 ASP.NET Core 1.0 的程序。

給猴子建一個家

首先你需要安裝 Docker (Linux) 的運行環境,也就是圖中藍色的部分。

https://qinblog.blob.core.windows.net/images/aspnetcore-mono-docker-linux-linux.png https://qinblog.blob.core.windows.net/images/aspnetcore-mono-docker-linux-windows.png

啊,這個好麻煩啊…… 如果你和我一樣有 Microsoft Azure 的訂閱,直接創建個 Ubuntu on Docker 的虛擬機來的更方便。

沒有的話,請參考官網文檔吧……

在 Windows 上安裝 Docker

在 Mac OS 上安裝 Docker

提示

Docker 不只有Linux版,也有Windows版(目前是預覽版),也就是說,如果想要安裝下面兩張圖的方式安裝也可以。

只不過,真用了Windows,一般也就用完整的 .NET Framework 了,而不用 mono

https://qinblog.blob.core.windows.net/images/aspnetcore-mono-docker-windows-linux.png https://qinblog.blob.core.windows.net/images/aspnetcore-mono-docker-windows-windows.png

一起動手囚禁一只猴子吧

接下來,有了容器,就可以弄只猴子了。

微軟已經制作好了一個容器,並且預置了一只猴子,並上傳到了 Docker Hub ,我們可以直接拿來用。

或者,我們可以從Github上弄到培育猴子的代碼來自己生成猴子。

在Docker(Linux)中安裝Mono及ASP.NET運行環境

在Docker(Windows)中安裝Mono及ASP.NET運行環境

創建空的 ASP.NET Core 網站

首先,你需要一個已經完成的 ASP.NET Core 1.0 應用。

對於Windows用戶,直接用 vs2015 創建一個新的 ASP.NET Core (模板名稱為ASP.NET 5) Web應用即可。

https://qinblog.blob.core.windows.net/images/create-aspnetcore-project-1.png https://qinblog.blob.core.windows.net/images/create-aspnetcore-project-2.png

Mac OS 用戶,可以參考 在 Mac OS 上創建的 ASP.NET Core 1.0 應用 的前半部分。

給容器里放點吃的

剛剛從 Docker Hub 下載的容器,里面並沒有我們的應用,就只有一只猴子而已,並沒什么卵用。 現在我們准備把剛剛創建的應用加入到容器中。

  • 創建Dockerfile

如果你在Mac OS上使用了 yo aspnet 來生成的項目,那么你已經有了Dockerfile;否則你需要自己在項目目錄創建一個文件名為Dockerfile的文件。

FROM microsoft/aspnet:1.0.0-rc1-update1

COPY . /app
WORKDIR /app
RUN ["dnu", "restore"]

EXPOSE 5000/tcp
ENTRYPOINT ["dnx", "-p", "project.json", "web"]

解釋一下每一行。

  • 由於Docker的文件系統是一層層的,FROM 表示在什么的基礎上構建當前鏡像,冒號后面是版本號;
  • COPY 是把本地文件拷貝到 Docker 中, . 表示當前目錄;
  • WORKDIR 指定工作目錄;
  • RUN 表示運行某一個程序,后面的是參數;
  • EXPOSE 表示將Docker的某個端口號暴露出來,以便主機與容器通信;
  • ENTRYPOINT 指定入口點,第一個是程序,后面的是參數。
  • 構建項目
docker build .

查看構建完成的鏡像,其中IMAGE ID是構建完成鏡像的標識符

docker images

給鏡像起個名字

docker tag {IMAGE ID} qinnz/wukong

小技巧

鏡像相當於容器的底片,我們可以用鏡像創建出許多一模一樣的容器。

讓真假美猴王同時給我們跑 ASP.NET Core

好了,你已經有了一個鏡像,需要把它運行起來,當然你可以運行多個實例(不過不能綁定同一個端口)。

docker run --name monkey_king -d -p 80:5000 qinnz/wukong
docker run --name his_dobule -d -p 81:5000 {IMAGE ID}

我們在后台( -d )啟動了2個實例(一個是真猴王,一個是假猴王),分別把這兩個容器(可以使用 Tag 或 IMAGE ID來標識)的5000端口映射到宿主機的80和81兩個端口了。

至此,我們就創建一個包含Mono運行環境的Docker容器,然后讓它給你運行 ASP.NET Core 1.0 的程序。

聲明 知識共享許可協議

丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0勤奮的小孩 創作,采用 知識共享 署名-非商業性使用-禁止演繹 4.0 國際 許可協議進行許可。
本許可協議授權之外的使用權限可以從 http://space.cnblogs.com/msg/send/qin-nz 處獲得。

posted on 2016-02-07 16:37  勤奮的小孩  閱讀(2124)  評論(11編輯  收藏


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM