NET Core Web 應用程式部署到 Docker 中運行

來源:互聯網
上載者:User

標籤:

NET Core Web 應用程式部署到 Docker 中運行環境介紹 : 

  虛擬機器:VirtualBox 5.1.6

 

  系 統:Ubuntu 16.04.1 LTS

 

  系統準備完成後可以使用 sudo apt-get udpate 和 sudo apt-get upgrade 對系統進行更新,然後開啟https://www.microsoft.com/net/core#ubuntu 這個網址,在ubuntu系統中安裝 .net core 運行環境。直接複製/粘貼給出的命令就可以了。

 安裝 Docker: 

  什麼是 Docker ? 這裡面就不介紹了,直接開啟 https://www.docker.com/what-docker 看吧或自行 google 中文的介紹。

 

  Docker 的安裝其實也是使用官方提供的 step by step 安裝步驟。如果不想看介紹可以直接使用下面我整理的命令:

 
//順序執行這些命令:sudo apt-get install apt-transport-https ca-certificatessudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D//開啟 /etc/apt/sources.list.d/docker.list 這個檔案,如果不存在就建立一個(sudo touch docker.list)//在 docker.list 中輸入下面這一行內容deb https://apt.dockerproject.org/repo ubuntu-xenial main//接著執行命令sudo apt-get updatesudo apt-get purge lxc-dockerapt-cache policy docker-enginesudo apt-get updatesudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtualsudo reboot //重啟系統sudo apt-get updatesudo apt-get install docker-enginesudo service docker start
 

上面的命令執行後,一定要看一下響應的結果,有些會提示是不用更新的,忽略即可。接下來我們執行一下經典的 hello-world.命令如下:  

 
sudo docker run hello-world
 

  執行這個命令,首先會從 docker 的鏡像倉庫(https://hub.docker.com/)中拉取名為 hello-world 的鏡像,然後在本地運行。運行成功之後,我們會看到 hello world 輸出。

 

  這裡說一下,docker 提供了一個集中管理鏡像的地方,即 https://hub.docker.com/,在這裡我們可以找到自己想要的基礎鏡像,當然我們也可以把自己製作的鏡像推送到 docker 的鏡像倉庫中,前提是註冊一個自己的 docker hub 帳號。

 Pull .NET Core image: 

docker 安裝成功後,我們就去 docker hub 中找由 Microsoft 維護的 dotnet core 基礎鏡像(https://hub.docker.com/r/microsoft/dotnet/),執行下面的命令將鏡像拉取到本地:

 
docker pull microsoft/dotnet
 

等待鏡像拉取到本地之後,我們運行下面的命令並查看 dotnet core 環境是否正常(這裡其實是多餘的,MS 怎麼可能給一個不能用的鏡像呢?):

 
docker run -it microsoft/dotnet /bin/bash
 

  這是進入到容器中的命令列。然後我們輸入 dotnet --version 查看到當前鏡像內的 dotnet CLI 版本號碼為:1.0.0-preview2-003131。輸入 exit 斷行符號 退出容器。

 

  好吧,現在 dotnet core 的 docker 鏡像也有了。

 建立 ASP.NET Core Web 應用程式: 

  文章開頭說了我已經在 Ubuntu 虛擬機器中也安裝了 dotnet core 環境。使用下面的 dotnet CLI 命令建立一個 ASP.NET Core Web 應用程式並嘗試運行:

 
mkdir web_2cd web_2/dotnet new -t webdotnet restoredotnet run
 

  我們嘗試運行,並看到運行成功。接下來使用 dotnet publish 將應用發布,預設發布到了 bin/Debug/netcoreapp1.0/publish/ 這個目錄。

 

  註:這裡發布的時候,如果不修改 project.json 裡面的 scripts 節點,將會用到 node.js ,可以將 prepublish 暫時注釋掉,或者安裝一下 node.js 並用 npm(安裝完 node.js 內建的) 安裝 gulp bower 這些包。

    命令:npm install -g gulp bower

 編寫 Dockerfile: 

  在應用根目錄建立一個名為 Dockerfile 的檔案(命令:touch Dockerfile)接下編輯 Dockerfile(命令:vi Dockerfile),輸入下面的內容:

 
# 聲明使用的基礎鏡像FROM microsoft/dotnet:latest# 將本地dotnet core 應用拷貝到 容器 /app/ 目錄下COPY bin/Debug/netcoreapp1.0/publish/ /app/# 設定工作目錄WORKDIR /app# 設定匯出連接埠EXPOSE 5000/tcp# 指定應用進入點ENTRYPOINT ["dotnet", "/app/web_2.dll"]
 

  完成 Dockerfile 的編寫,接下來構建一個鏡像。

 

  命令:docker build -t web_2 .

 

  不要忘記 web_2 後面的那個點。鏡像構建完成之後,我們就來運行試試吧。

 

  命令:docker run -it -p 5000:5000 web_2

 

  這裡說一下 -it 是指:進入臨時互動模式

  -p 5000:5000 是指將容器的 5000 連接埠映射到 Docker 宿主機的 5000 連接埠

  web_2 是指剛才我們構建的鏡像。

 

  看到臨時互動命令列,顯示運行成功。我的 Ubuntu 的 IP 是 192.168.10.107。我們用瀏覽器訪問一下 http://192.168.10.107:5000 。壞了,什麼也沒有顯示,查看 http 狀態代碼為 500 ,這說明是應用報錯了。經過排查發現是 dotnet core web 應用引用類庫的版本問題。大家知道前兩天發布了 dotnet core 1.0.1,我就在 project.json 裡面發現我通過 dotnet CLI 建立的應用已經在使用 1.0.1 版本的類庫了。但是基礎鏡像 microsoft/dotnet 中還是 dotnet 1.0.0 的類庫。好吧,知道了問題了,就來修改 project.json 中引用的版本吧。將 1.0.1 改為 1.0.0。再次執行 dotnet restore 和 dotnet publish。然後後重新構建 docker 鏡像並運行。哇,成功了!

 總結: 

  通過上面的介紹,我們體驗了在 docker 中運行 .net core web 應用。一步一步執行下來發現都是通過命令列安裝各種執行環境,有 dotnet core 運行環境,有 docker 運行環境,有 node.js 運行環境。與編碼人員的關係並不是太大。有時候按著 step by step 走,結果發現走不通,這個時候我們就要仔細分析給出的錯誤描述是什麼,一步一步的找到問題所在,並解決掉。

 

  不過我們想想上面的這些步驟自動化之後,將是一種怎麼樣的體驗?我們來暢想一下。每次開發人員編寫完代碼提交後,通過 CI 工具,自動構建應用並自動發布,完了再自動構建 docker 鏡像並運行。測試通過後,直接將鏡像用於生產環境。再進行迴歸測試。

NET Core Web 應用程式部署到 Docker 中運行

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.