小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03
本文是一篇指導快速演練的文章,將介紹在docker中運行一個ASP.NET Core Web API應用程序的基本步驟,在介紹的過程中,也會對docker的使用進行一些簡單的描述。對於.NET Core以及docker的基本概念,網上已經有很多文章對其進行介紹了,因此本文不會再詳細講解這些內容。對.NET Core和docker不了解的朋友,建議首先查閱與這些技術相關的文檔,然後再閱讀本文。
要完成本文所介紹的演練任務,需要准備以下環境:
有關Docker for Windows的內容,我會在另外的文章中介紹。
打開Visual Studio 2015,在新建項目的對話框中選擇.NET Core分類下的ASP.NET Core Web Application (.NET Core)項目模板,給項目命名為DockerWebAPI,然後單擊確定按鈕。
在New ASP.NET Core Web Application (.NET Core)對話框中,選擇Web API,然後點擊確定按鈕。
項目成功創建後,在解決方案浏覽器中可以看到如下項目結構:
在此也不對ASP.NET Core的應用程序結構做過多介紹了。接下來,我們修改一下自動產生的ValuesController,使得GET方法返回當前機器的機器名,如下:
打開Program.cs文件,在構建WebHostBuilder的連貫方法鏈中,加入UseUrls調用,以便我們的應用程序可以接受來自任何IP的請求。這就使得應用程序在docker容器中也能接受HTTP請求:
OK,編譯後,在命令行使用dotnet run運行這個應用程序:
打開浏覽器,測試一下我們的應用,運行成功:
首先,進入項目根目錄(也就是包含有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等文本編輯器,輸入以下內容(#開頭的行為注釋行,可以不輸入):
# 基於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:
docker build -t daxnet/docker-webapi .
注意,千萬別省略了最後一個點號,它表示采用當前路徑的Dockerfile來生成Docker Image。如果是第一次生成,由於需要下載microsoft/dotnet:latest這個Docker Image作為基礎Image,所以會比較慢(國內網速原因,你懂的)。如果成功的話,大致可以看到以下畫面:
現在,我們就可以使用docker run來執行剛才產生的Docker Image了。docker run會把Docker Image加載到Docker Container中,然後執行由Dockerfile指定的命令(也就是dotnet DockerWebAPI.dll命令)。docker run的命令如下:
docker run -it -p 8080:5000 daxnet/docker-webapi
在這條命令中:
運行後,可以看到如下界面:
讓我們測試一下,在Linux中使用curl命令調用我們的服務,注意,與之前的測試相比,端口號需要由5000改為8080:
當然,也可以在另一台機器的浏覽器中調用:
事實上,這時返回的機器名,已經是Docker容器的ID值了:
本文通過快速地對各個步驟的描述,介紹了使用Visual Studio 2015創建ASP.NET Core WebAPI應用程序,並在Docker中運行該應用程序的方法。有些地方可能描述得不是很清楚,如有疑問歡迎留言討論。今後爭取能夠更多地分享Visual Studio 2015、Docker、.NET Core等相關的實踐經驗。
參考頁面:http://qingqingquege.cnblogs.com/p/5933752.html