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

來源:互聯網
上載者:User

標籤:

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

先決條件

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

  • 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,然後單擊確定按鈕。

在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運行這個應用程式:

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

將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等文字編輯器,輸入以下內容(#開頭的行為注釋行,可以不輸入):

# 基於microsoft/dotnet:latest構建Docker ImageFROM 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 Container中運行ASP.NET Core Web API應用程式

現在,我們就可以使用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

在這條命令中:

  • -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 2015、Docker、.NET Core等相關的實踐經驗。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.