.NET Core 微服務架構-Docker部署

本文主要介紹經過Docker來部署經過.NET Core開發的微服務架構,部署的微服務主要包括統一網關(使用Ocelot開發)、統一認證(IdentityServer4)、應用服務(ASP.NET Core WebAPI)。linux

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

1、Docker原理

對 Docker 最簡單而且帶有必定錯誤的認知就是 「Docker 是一種性能很是好的虛擬機」。docker

可是這是有必定錯誤的說法。Docker 相比於傳統虛擬機的技術來講先進了很多,具體表如今 Docker 不是在宿主機上虛擬出一套硬件後再虛擬出一個操做系統,而是讓 Docker 容器裏面的進程直接運行在宿主機上(Docker 會作文件、網絡等的隔離),這樣一來 Docker 會 「體積更輕、跑的更快、同宿主機下可建立的個數更多」。ubuntu

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

  • Image: 你們對 鏡像 的概念不會陌生。但和 windows 的那種 iso 鏡像相比,Docker 中的鏡像是分層的,可複用的,而非簡單的一堆文件迭在一塊兒(相似於一個壓縮包的源碼和一個 git 倉庫的區別)。api

  • Container: 容器的存在離不開鏡像的支持,他是鏡像運行時的一個載體(相似於實例和類的關係)。依託 Docker 的虛擬化技術,給容器建立了獨立的端口、進程、文件等「空間」,Container 就是一個與宿機隔離 「容器」。容器可宿主機之間能夠進行 port、volumes、network 等的通訊。服務器

Repository: Docker 的倉庫和 git 的倉庫比較類似,擁有倉庫名、tag。在本地構建完鏡像以後,便可經過倉庫進行鏡像的分發。網絡

經常使用的 Docker hub有:架構

https://hub.docker.com/(docker官方)app

https://cr.console.aliyun.com/

2、Windows系統中Docker的安裝

一、啓用Hyper-V

打開控制面板 - 程序和功能 - 啓用或關閉Windows功能,勾選Hyper-V,而後點擊肯定便可,如圖:

cdoecker

二、下載並安裝Docker

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

下載完成後直接安裝

經過命令查看Docker版本號:

cdoecker

三、修改鏡像地址

因爲Docker官方鏡像會很是慢,我是修改的阿里雲的鏡像

cdoecker

四、測試

萬能的HelloWorld,經過PowerShell運行 Docker run hello-world

cdoecker

docker ps -a //查看運行的容器

cdoecker

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

3、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,具體怎麼用能夠百度

4、發佈並部署服務

一、建立Dockerfile、發佈應用程序

cdoecker

這是個人工程目錄,構建鏡像是經過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的編譯爲輸出到發佈目錄 cdoecker

 

以上都設置好之後,經過VS發佈程序

cdoecker

發佈成功後,在工程目錄的bin/release目錄下找到咱們的發佈後的文件

cdoecker

其餘服務的發佈跟以上發佈相似

二、上傳到ubuntu中

經過WinScp工具進行上傳,將三個服務都上傳到服務器,WinScp怎麼用,能夠百度一下

cdoecker

三、構建鏡像

 

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文件路徑 

cdoecker

 

docker images //查看鏡像

cdoecker

四、運行容器

鏡像已經在前面構建完成,這一步會根據構建的鏡像來運行容器,將咱們的服務跑起來

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 cdoecker

在配置網關服務的時候會涉及到容器與容器之間的網絡訪問,Docker在安裝的時候會建立一個172.17.0.1的IP網關,能夠經過172.17.0.1來作端口的轉發。

經過命令能夠查看docker0的網關

cdoecker

Api網關的路由轉發配置

cdoecker

五、調用服務

經過Postman來調用經過Docker運行的服務,經過API網關訪問認證服務獲取Token

cdoecker

總結

整個Docker的安裝,服務的發佈,鏡像的打包,容器的運行就所有完成。

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

Docekr介紹使用

相關文章
相關標籤/搜索