丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0¶警告您當前查看的頁面是未經授權的轉載! 如果當前版本排版錯誤,請前往查看最新版本:http://www.cnblogs.com/qin-nz/p/aspnetcore-run-on-mono-in-year-of-monkey.ht...
丙申年把真假美猴王囚禁在容器中跑 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 不只有Linux版,也有Windows版(目前是預覽版),也就是說,如果想要安裝下麵兩張圖的方式安裝也可以。
只不過,真用了Windows,一般也就用完整的 .NET Framework 了,而不用 mono
。
一起動手囚禁一隻猴子吧¶
接下來,有了容器,就可以弄只猴子了。
微軟已經製作好了一個容器,並且預置了一隻猴子,並上傳到了 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應用即可。
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 的程式。
更多資源¶
在 Mac OS 上創建並運行 ASP.NET Core 1.0 網站
在 Mac OS X 上創建的 .NET 命令行程式訪問資料庫 (使用Entity Framework 7 )
丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0 由 勤奮的小孩 創作,採用 知識共用 署名-非商業性使用-禁止演繹 4.0 國際 許可協議進行許可。
本許可協議授權之外的使用許可權可以從 http://space.cnblogs.com/msg/send/qin-nz 處獲得。