本文是一篇指導快速演練的文章,將介紹在docker中運行一個ASP.NET Core Web API應用程序的基本步驟,在介紹的過程當中,也會對docker的使用進行一些簡單的描述。對於.NET Core以及docker的基本概念,網上已經有不少文章對其進行介紹了,所以本文不會再詳細講解這些內容。對.NET Core和docker不瞭解的朋友,建議首先查閱與這些技術相關的文檔,而後再閱讀本文。html
先決條件
要完成本文所介紹的演練任務,須要準備如下環境:linux
- Visual Studio 2015,或者Visual Studio Code,用於建立ASP.NET Core的Web API應用程序。本文使用Visual Studio 2015
- 若是使用Visual Studio 2015,則須要安裝.NET Core 1.0.0 – VS 2015 Tooling Preview 2。請點擊此處安裝
- Microsoft .NET Core SDK,能夠到微軟官方網站下載安裝
- 一臺裝有Ubuntu 14.04.4 LTS的機器,能夠是虛擬機。在Ubuntu中安裝docker CLI。能夠按照docker網站上的步驟進行安裝
- 若是但願在Windows下使用docker,請確保Windows機器知足下面的需求:
- 64位Windows 10 Pro、Enterprise或者Education版本(Build 10586以上版本,須要安裝1511 November更新)
- 在系統中啓用Hyper-V。若是沒有啓用,Docker for Windows在安裝過程當中會自動啓用Hyper-V(這個過程須要重啓系統)
有關Docker for Windows的內容,我會在另外的文章中介紹。web
演練步驟
使用Visual Studio 2015建立一個ASP.NET Core的Web API應用程序
打開Visual Studio 2015,在新建項目的對話框中選擇.NET Core分類下的ASP.NET Core Web Application (.NET Core)項目模板,給項目命名爲DockerWebAPI,而後單擊肯定按鈕。docker
在New ASP.NET Core Web Application (.NET Core)對話框中,選擇Web API,而後點擊肯定按鈕。shell
項目成功建立後,在解決方案瀏覽器中能夠看到以下項目結構:json
在此也不對ASP.NET Core的應用程序結構作過多介紹了。接下來,咱們修改一下自動產生的ValuesController,使得GET方法返回當前機器的機器名,以下:ubuntu
打開Program.cs文件,在構建WebHostBuilder的連貫方法鏈中,加入UseUrls調用,以便咱們的應用程序能夠接受來自任何IP的請求。這就使得應用程序在docker容器中也能接受HTTP請求:vim
OK,編譯後,在命令行使用dotnet run運行這個應用程序:api
打開瀏覽器,測試一下咱們的應用,運行成功:瀏覽器
將ASP.NET Core Web API應用程序編譯成Docker Image
首先,進入項目根目錄(也就是包含有project.json文件的這個目錄),使用dotnet publish命令發佈應用程序。這就會把編譯後的DLL連同依賴項一塊兒,所有複製到bin/Debug/netcoreapp1.0/publish目錄下。此時,使用WinSCP相似的軟件,將該目錄下的全部內容所有複製到Ubuntu的機器上(固然,若是是在Windows 10下使用Docker,也就不須要這個複製的步驟)。複製完成後,在Ubuntu系統中能夠看到全部的這些文件:
咱們順便在Ubuntu中測試一下這個應用程序,看ASP.NET Core Web API是否可以在Linux的系統中與Windows下有着相同的用戶體驗。此時,在這個目錄下運行dotnet DockerWebAPI.dll命令(要運行dotnet命令,就須要在Ubuntu中安裝.NET Core CLI,也能夠到微軟官方網站下載安裝,但對於本文的演練來講,這一步是不必定須要的),能夠看到下面的界面:
使用curl命令測試一下:
測試成功。
接下來,在這個包含有DockerWebAPI.dll文件的目錄下,新建一個Dockerfile文件,使用vim或者nano等文本編輯器,輸入如下內容(#開頭的行爲註釋行,能夠不輸入):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 基於microsoft/dotnet:latest構建Docker Image
FROM microsoft/dotnet:latest
# 進入docker中的/usr/local/src目錄
RUN cd /usr/local/src
# 建立DockerWebAPI目錄
RUN mkdir DockerWebAPI
# 設置工做路徑
WORKDIR /usr/local/src/DockerWebAPI
# 將當前文件夾下的全部文件所有複製到工做目錄
COPY *.* ./
# 向外界暴露5000端口
EXPOSE 5000
# 執行dotnet DockerWebAPI.dll命令
CMD ["dotnet", "DockerWebAPI.dll"]
|
關於Dockerfile的定義,咱們暫不討論,請參考Docker的官方文檔。
仍然在當前目錄下,執行如下命令,建立Docker Image:
1
|
docker build -t daxnet/docker-webapi .
|
注意,千萬別省略了最後一個點號,它表示採用當前路徑的Dockerfile來生成Docker Image。若是是第一次生成,因爲須要下載microsoft/dotnet:latest這個Docker Image做爲基礎Image,因此會比較慢(國內網速緣由,你懂的)。若是成功的話,大體能夠看到如下畫面:
在Docker Container中運行ASP.NET Core Web API應用程序
如今,咱們就可使用docker run來執行剛纔產生的Docker Image了。docker run會把Docker Image加載到Docker Container中,而後執行由Dockerfile指定的命令(也就是dotnet DockerWebAPI.dll命令)。docker run的命令以下:
1
|
docker run -it -p 8080:5000 daxnet/docker-webapi
|
在這條命令中:
- -it參數表示須要提供一個模擬的shell環境,並要求有用戶交互功能,這樣當咱們按下Ctrl+C的時候,就能夠中止咱們的應用程序
- -p 8080:5000參數表示須要將Docker Container的5000端口映射到主機環境的8080端口,也就是客戶端能夠直接經過8080端口訪問咱們的應用程序
- daxnet/docker-webapi參數指定了須要運行的Docker Image。此處採用默認的latest標籤
運行後,能夠看到以下界面:
讓咱們測試一下,在Linux中使用curl命令調用咱們的服務,注意,與以前的測試相比,端口號須要由5000改成8080:
固然,也能夠在另外一臺機器的瀏覽器中調用:
事實上,這時返回的機器名,已是Docker容器的ID值了:
總結
本文經過快速地對各個步驟的描述,介紹了使用Visual Studio 2015建立ASP.NET Core WebAPI應用程序,並在Docker中運行該應用程序的方法。有些地方可能描述得不是很清楚,若有疑問歡迎留言討論。從此爭取可以更多地分享Visual Studio 201五、Docker、.NET Core等相關的實踐經驗。