在docker中運行ASP.NET Core Web API應用程序


本文是一篇指導快速演練的文章,將介紹在docker中運行一個ASP.NET Core Web API應用程序的基本步驟,在介紹的過程中,也會對docker的使用進行一些簡單的描述。對於.NET Core以及docker的基本概念,網上已經有很多文章對其進行介紹了,因此本文不會再詳細講解這些內容。對.NET Core和docker不了解的朋友,建議首先查閱與這些技術相關的文檔,然后再閱讀本文。

轉載於:http://www.cnblogs.com/daxnet/p/5782019.html

先決條件

要完成本文所介紹的演練任務,需要准備以下環境:

  • 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的內容,我會在另外的文章中介紹。

演練步驟

使用Visual Studio 2015創建一個ASP.NET Core的Web API應用程序

打開Visual Studio 2015,在新建項目的對話框中選擇.NET Core分類下的ASP.NET Core Web Application (.NET Core)項目模板,給項目命名為DockerWebAPI,然后單擊確定按鈕。

image

在New ASP.NET Core Web Application (.NET Core)對話框中,選擇Web API,然后點擊確定按鈕。

image

項目成功創建后,在解決方案瀏覽器中可以看到如下項目結構:(注意:其中的DockerWebAPI1是我為后面做負載均衡准備的第二個項目)

 

在此也不對ASP.NET Core的應用程序結構做過多介紹了。接下來,我們修改一下自動產生的ValuesController,使得GET方法返回當前機器的機器名,如下:

image

 

打開Program.cs文件,在構建WebHostBuilder的連貫方法鏈中,加入UseUrls調用,以便我們的應用程序可以接受來自任何IP的請求。這就使得應用程序在docker容器中也能接受HTTP請求:

image

OK,編譯后,在命令行使用dotnet run運行這個應用程序:

 

打開瀏覽器,測試一下我們的應用,運行成功:

image

將ASP.NET Core Web API應用程序編譯成Docker Image

首先,進入項目根目錄(如我的項目目錄為:C:\Users\Administrator\Documents\Visual Studio 2017\Projects\DockerWebAPI\DockerWebAPI),使用dotnet publish命令發布應用程序。這就會把編譯后的DLL連同依賴項一起,全部復制到bin/Debug/netcoreapp1.0/publish目錄下。dotnet publish命令成功后,在命令行

中可以看到所有的這些文件:

 

接下來,在這個包含有DockerWebAPI.dll文件的目錄下,新建一個Dockerfile文件,使用文本編輯器進行編輯,不過我是用的記事本。輸入以下內容(#開頭的行為注釋行,可以不輸入):

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,所以會比較慢(國內網速原因,你懂的,如果想提高下載速度,可以使用阿里雲的鏡像,下一篇文章中我會講到怎么使用阿里雲鏡像)。如果成功的話,大致可以看到以下畫面:

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標簽

運行后,可以看到如下界面:

image

讓我們測試一下,注意,與之前的測試相比,端口號需要由5000改為8080:

 

當然,也可以在另一台機器的瀏覽器中調用:

 

事實上,這時返回的機器名,已經是Docker容器的ID值了:

image


免責聲明!

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



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