歡迎光臨
每天分享高質量文章

Docker的部署-包括閘道器服務(Ocelot)+認證服務(IdentityServer4)+應用服務

本文主要介紹透過Docker來部署透過.Net Core開發的微服務架構,部署的微服務主要包括統一閘道器(使用Ocelot開發)、統一認證(IdentityServer4)、應用服務(asp.net core web api);

本文不針對微服務進行說明,後續會針對我對微服務的理解在做記錄。

一、Docker原理

對 Docker 最簡單並且帶有一定錯誤的認知就是 “Docker 是一種效能非常好的虛擬機器”。

但是這是有一定錯誤的說法。Docker 相比於傳統虛擬機器的技術來說先進了不少,具體表現在 Docker 不是在宿主機上虛擬出一套硬體後再虛擬出一個作業系統,而是讓 Docker 容器裡面的行程直接執行在宿主機上(Docker 會做檔案、網路等的隔離),這樣一來 Docker 會 “體積更輕、跑的更快、同宿主機下可建立的個數更多”。

Docker 中有三個核心概念:Image、Container、Repository。

  • Image: 大家對 映象 的概念不會陌生。但和 windows 的那種 iso 映象相比,Docker 中的映象是分層的,可復用的,而非簡單的一堆檔案迭在一起(類似於一個壓縮包的原始碼和一個 git 倉庫的區別)。

  • Container: 容器的存在離不開映象的支援,他是映象執行時的一個載體(類似於實體和類的關係)。依託 Docker 的虛擬化技術,給容器建立了獨立的埠、行程、檔案等“空間”,Container 就是一個與宿機隔離 “容器”。容器可宿主機之間可以進行 port、volumes、network 等的通訊。

  • Repository: Docker 的倉庫和 git 的倉庫比較相似,擁有倉庫名、tag。在本地構建完映象之後,即可透過倉庫進行映象的分發。常用的 Docker hub 有 https://hub.docker.com/(docker官方) 、 https://cr.console.aliyun.com/(阿裡雲)等。

二、Windows系統中Docker的安裝

1、啟用Hyper-V

開啟控制面板 – 程式和功能 – 啟用或關閉Windows功能,勾選Hyper-V,然後點選確定即可,如圖:

 

 2、下載並安裝Docker

下載地址:https://hub.docker.com/editions/community/docker-ce-desktop-windows,需要註冊一個Docker賬號才能下載

下載完成後直接安裝

 透過命令檢視Docker版本號:

 3、修改映象地址

由於Docker官方映象會非常慢,我是修改的阿裡雲的映象

4、測試

萬能的HelloWorld,透過PowerShell執行 Docker run hello-world

 

以上就是整個Windows中安裝Docker環境的過程

三、ubuntu中安裝Docker環境

我是在AWS申請了一臺免費的伺服器,是用的ubuntu系統。如果需要申請AWS的伺服器,可以透過AWS官網註冊賬號進行申請,需要填寫信用卡賬號,https://portal.aws.amazon.com/billing/signup#/start

本文ubuntu中安裝Docker是直接參考官方教程:https://docs.docker.com/install/linux/docker-ce/ubuntu/

安裝的時候最好切換到root賬號進行安裝

ubuntu的遠端是透過putty,具體怎麼用可以百度

四、釋出並部署服務

1、建立Dockerfile、釋出應用程式

這是我的工程目錄,構建映象是透過Dockerfile來構建的。

VS2017 是支援自動構建Dockerfile檔案,工程右鍵-新增-Docker支援

下麵是我的Dockerfile的內容

FROM microsoft/aspnetcore:2.1 //基礎映象,這裡是.net core的基礎執行環境
WORKDIR /publish //建立工程目錄
COPY . /publish //將當前目錄複製到映象中,註意 COPY . 後面又空格
EXPOSE 80 //容器對外暴露80埠
ENTRYPOINT ["dotnet", "ZY.Gateway.dll"] //啟動容器內的服務
//這裡相當於構建映象的命令,是逐行執行

需要設定Dockerfile的編譯為輸出到釋出目錄

以上都設定好以後,透過VS釋出程式

釋出成功後,在工程目錄的bin/release目錄下找到我們的釋出後的檔案

其他服務的釋出跟以上釋出類似

2、上傳到ubuntu中

透過WinScp工具進行上傳,將三個服務都上傳到伺服器,WinScp怎麼用,可以百度一下

3、構建映象

docker build -t apigateway .   //構建閘道器映象

docker build -t identityserver -f /home/ubuntu/dockerapp/identityserver/publish/Dockerfile . //構建認證服務映象

docker build -t testserver -f /home/ubuntu/dockerapp/testserver/publish/Dockerfile . //構建測試服務映象

-t //映象名稱

-f //dockerfile檔案路徑

docker images //檢視映象

 4、執行容器

映象已經在前面構建完成,這一步會根據構建的映象來執行容器,將我們的服務跑起來

docker run -d -p 5000:80 --name apigateway_container apigateway
docker run -d -p 6000:80 --name identityserver_container identityserver
docker run -d -p 7000:80 --name testserver_container testserver
//分別將閘道器服務,認證服務,測試服務容器跑起來
//-d 保持後臺行程執行 -p 埠對映,{主機埠}:{容器埠}

 透過命令檢視容器執行情況

docker ps -a

在配置閘道器服務的時候會涉及到容器與容器之間的網路訪問,Docker在安裝的時候會建立一個172.17.0.1的IP閘道器,可以透過172.17.0.1來做埠的轉發。

透過命令可以檢視docker0的閘道器

Api閘道器的路由轉發配置

5、呼叫服務

 透過Postman來呼叫透過Docker執行的服務,透過API閘道器訪問認證服務獲取Token

 

整個Docker的安裝,服務的釋出,映象的打包,容器的執行就全部完成。

整個過程不是一氣呵成的,踩了不少坑,在踩坑的過程中也學到和理解了很多東西。

下一篇會介紹透過docker-compose進行釋出,透過docker-compose可以實現一行命令將完成所有服務的構建映象和執行映象過程。

https://www.cnblogs.com/zyrmb/p/10509524.html  //這是我記錄的關於Docker相關的命令,可以參考

https://yeasy.gitbooks.io/docker_practice/content/  //這是針對Docker的整體介紹

贊(0)

分享創造快樂