天天看點

.Net & Docker(一)在Docker容器上運作.Net Core API

Jesse jessetalks

為什麼要寫這個?

在一個系統長大的過程中會經曆不斷重構更新來滿足商業的需求,而一個嚴謹的商業系統需要高效、穩定、可擴充,有時候還不得不考慮成本的問題。我希望能找到比較完整的開源解決方案來解決持續內建、監控報警、以及擴容和高可用性的問題。是學習和探索的過程分享給大家,也歡迎同行的人交流。

先來一個三步曲,我們将完成通過GitLab CI 自動部署 net core web api 到Docker 容器的一個示例。這是第一步,通過此文您将了解如何将net core web api 運作在Docker容器中。

在Docker 容中運作Asp.net Core web API

用Docker 5分鐘搭一套Gitlab 環境

用GitLab CI 完成 .Net Core API 的自動部署 

以上所有示例将在Mac中完成。

.Net & Docker(一)在Docker容器上運作.Net Core API

我們将對Docker進行一些初步的介紹,安裝以及基本的操作;然後我們會建立一個最簡單的 netcore web api 并讓它在Docker中運作。

Docker的安裝

當然Mac上的安裝是非常簡單的,隻需要到Docker的官網上下載下傳一個docker for mac的安裝包就可以了。安裝完之後,就會在頂部的狀态欄中看到Docker的圖示。

.Net & Docker(一)在Docker容器上運作.Net Core API

關于鏡像的問題

如果不使用國内鏡像的話,下載下傳image将會非常的慢。在阿裡雲中可以申請一個自己的加速位址,速度是非常不錯的。進入阿裡雲控制台-> 産品與服務-> 容器服務 下的鏡像倉庫控制台 可以在Docker Hub鏡像站點中找到。

.Net & Docker(一)在Docker容器上運作.Net Core API

在Docker中配置鏡像:

.Net & Docker(一)在Docker容器上運作.Net Core API

安裝完之後可以在terminal中輸入docker info 來檢測是否安裝正常。 

Docker的入門使用

下面介紹一些簡單的Docker指令,以便從來沒有實踐過Docker的同學來了解我們接下來要做的事情。

.Net & Docker(一)在Docker容器上運作.Net Core API

當我們剛開始安裝完Docker之後,本地是沒有任何的鏡像的。永遠的入門第一步,下載下傳一個hello-world的鏡像然後運作它。

.Net & Docker(一)在Docker容器上運作.Net Core API

helloworld是鏡像的名稱,我們預設連接配接的是docker hub也就是官方提供的鏡像倉庫,當然我們也可以連接配接其它的甚至建立自己的鏡像倉庫。當本地沒有 helloworld這個鏡像的時候,Docker就會自動去下載下傳這個鏡像到本地。 

關于DockerFile

docker build指令在建構一個image的時候所需要的資訊都在DockerFile中。比如我們接下來要運作的一個asp.net core api 的容器大概需要這樣幾步:

.Net & Docker(一)在Docker容器上運作.Net Core API

安裝并運作.net core web api 

在Mac上安裝net core ,首先需要下載下傳更新最新的OpenSSL 

.Net & Docker(一)在Docker容器上運作.Net Core API

然後可以到官網下載下傳net core 1.1 on MacOS,完成之後可以在指令行輸入 dotnet --version 來檢測目前的版本。

初始化項目并運作

通過3個命領我們可以完成初始化項目并運作的全過程: dotnet new|restore|run。 dotnet 架構預設提供一些初始化的項目模闆,可以輸入dotnet new -all來檢視。

.Net & Docker(一)在Docker容器上運作.Net Core API

我們可以用 dotnet new webapi 來初始化一個與檔案夾名稱相同的 webapi項目,也可以在後面加 -n自定義一個項目名稱。然後接着在指令行中進入項目的目錄輸入 dotnet restore,最後用 dotnet run來運作這個web api 項目。

.Net & Docker(一)在Docker容器上運作.Net Core API

接着就可以在本地浏覽這個api:

.Net & Docker(一)在Docker容器上運作.Net Core API

到這裡我們的dotnet core web api已經運作在本地了,接下來我們就要讓它運作在Docker中。

在Docker中運作dotnet core web api

上面我們已經講過DockerFile以及一個net core web api 中應該如何配置它。我們會把它放到項目的根目錄裡。 可以用Visual studio for mac 打開整個web api項目。

.Net & Docker(一)在Docker容器上運作.Net Core API

接下來我們要做的就是把我們這個代碼建構成一個鏡像。

.Net & Docker(一)在Docker容器上運作.Net Core API

我們在terminal中進行項目的根目錄,輸入 docker build -t myapiimage . 

.Net & Docker(一)在Docker容器上運作.Net Core API

完成之後輸入 docker images 可以檢視到我們剛剛建立的鏡像 

.Net & Docker(一)在Docker容器上運作.Net Core API

接下來我們就可以用 docker run 用剛剛這個鏡像啟動一個容器運作在host的 8080端口。

.Net & Docker(一)在Docker容器上運作.Net Core API

這個時候我們再通路之前的api就需要通過8080端口,而此時的 api 已經是在容器中運作的。

.Net & Docker(一)在Docker容器上運作.Net Core API

到這裡我們已經完成了第一步,在Docker容器中順利運作了我們的net core web api。 後面一篇将介紹如何利用Docker快速部署一套GitLab的環境。

Jav