手機版
你好,游客 登錄 注冊
背景:
閱讀新聞

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

[日期:2020-01-03] 來源:cnblogs.com/burningmyself  作者:yfb [字體: ]

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

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

一、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,然后點擊確定即可,如圖:

cdoecker

2、下載并安裝Docker¶

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

下載完成后直接安裝

通過命令查看Docker版本號:

cdoecker

3、修改鏡像地址¶

由于Docker官方鏡像會非常慢,我是修改的阿里云的鏡像

cdoecker

4、測試¶

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

cdoecker

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

cdoecker

以上就是整個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、發布應用程序¶

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

其他服務的發布跟以上發布類似

2、上傳到ubuntu中¶

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

cdoecker

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

cdoecker

 

docker images //查看鏡像

cdoecker

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 cdoecker

在配置網關服務的時候會涉及到容器與容器之間的網絡訪問,Docker在安裝的時候會創建一個172.17.0.1的IP網關,可以通過172.17.0.1來做端口的轉發。

通過命令可以查看docker0的網關

cdoecker

Api網關的路由轉發配置

cdoecker

5、調用服務¶

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

cdoecker

總結¶

整個Docker的安裝,服務的發布,鏡像的打包,容器的運行就全部完成。

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

linux
相關資訊       Docker部署  微服務  微服務架構 
本文評論   查看全部評論 (0)
表情: 表情 姓名: 字數

       

評論聲明
  • 尊重網上道德,遵守中華人民共和國的各項有關法律法規
  • 承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
  • 本站管理人員有權保留或刪除其管轄留言中的任意內容
  • 本站有權在網站內轉載或引用您的評論
  • 參與本評論即表明您已經閱讀并接受上述條款
彩票投注骗局