丙申年把真假美猴王囚禁在容器中跑 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) 的運行環境,也就是圖中藍色的部分。


啊,這個好麻煩啊…… 如果你和我一樣有 Microsoft Azure 的訂閱,直接創建個 Ubuntu on Docker 的虛擬機來的更方便。
沒有的話,請參考官網文檔吧……
一起動手囚禁一只猴子吧¶
接下來,有了容器,就可以弄只猴子了。
微軟已經制作好了一個容器,並且預置了一只猴子,並上傳到了 Docker Hub ,我們可以直接拿來用。
或者,我們可以從Github上弄到培育猴子的代碼來自己生成猴子。
創建空的 ASP.NET Core 網站¶
首先,你需要一個已經完成的 ASP.NET Core 1.0 應用。
對於Windows用戶,直接用 vs2015 創建一個新的 ASP.NET Core (模板名稱為ASP.NET 5) Web應用即可。


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 處獲得。