Docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务
本文主要介紹通過Docker來部署通過.Net Core開發(fā)的微服務(wù)架構(gòu),部署的微服務(wù)主要包括統(tǒng)一網(wǎng)關(guān)(使用Ocelot開發(fā))、統(tǒng)一認(rèn)證(IdentityServer4)、應(yīng)用服務(wù)(asp.net core web api);
本文不針對微服務(wù)進(jìn)行說明,后續(xù)會針對我對微服務(wù)的理解在做記錄。
一、Docker原理
對 Docker 最簡單并且?guī)в幸欢ㄥe誤的認(rèn)知就是 “Docker 是一種性能非常好的虛擬機(jī)”。
但是這是有一定錯誤的說法。Docker 相比于傳統(tǒng)虛擬機(jī)的技術(shù)來說先進(jìn)了不少,具體表現(xiàn)在 Docker 不是在宿主機(jī)上虛擬出一套硬件后再虛擬出一個操作系統(tǒng),而是讓 Docker 容器里面的進(jìn)程直接運(yùn)行在宿主機(jī)上(Docker 會做文件、網(wǎng)絡(luò)等的隔離),這樣一來 Docker 會 “體積更輕、跑的更快、同宿主機(jī)下可創(chuàng)建的個數(shù)更多”。
Docker 中有三個核心概念:Image、Container、Repository。
Image:?大家對?鏡像?的概念不會陌生。但和 windows 的那種 iso 鏡像相比,Docker 中的鏡像是分層的,可復(fù)用的,而非簡單的一堆文件迭在一起(類似于一個壓縮包的源碼和一個 git 倉庫的區(qū)別)。
Container:?容器的存在離不開鏡像的支持,他是鏡像運(yùn)行時的一個載體(類似于實(shí)例和類的關(guān)系)。依托 Docker 的虛擬化技術(shù),給容器創(chuàng)建了獨(dú)立的端口、進(jìn)程、文件等“空間”,Container 就是一個與宿機(jī)隔離 “容器”。容器可宿主機(jī)之間可以進(jìn)行 port、volumes、network 等的通信。
Repository:?Docker 的倉庫和 git 的倉庫比較相似,擁有倉庫名、tag。在本地構(gòu)建完鏡像之后,即可通過倉庫進(jìn)行鏡像的分發(fā)。常用的 Docker hub 有 https://hub.docker.com/(docker官方) 、 https://cr.console.aliyun.com/(阿里云)等。
二、Windows系統(tǒng)中Docker的安裝
1、啟用Hyper-V
打開控制面板 - 程序和功能 - 啟用或關(guān)閉Windows功能,勾選Hyper-V,然后點(diǎn)擊確定即可,如圖:
?
?2、下載并安裝Docker
下載地址:https://hub.docker.com/editions/community/docker-ce-desktop-windows,需要注冊一個Docker賬號才能下載
下載完成后直接安裝
?通過命令查看Docker版本號:
?3、修改鏡像地址
由于Docker官方鏡像會非常慢,我是修改的阿里云的鏡像
4、測試
萬能的HelloWorld,通過PowerShell運(yùn)行 Docker run hello-world
?
以上就是整個Windows中安裝Docker環(huán)境的過程
三、ubuntu中安裝Docker環(huán)境
我是在AWS申請了一臺免費(fèi)的服務(wù)器,是用的ubuntu系統(tǒng)。如果需要申請AWS的服務(wù)器,可以通過AWS官網(wǎng)注冊賬號進(jìn)行申請,需要填寫信用卡賬號,https://portal.aws.amazon.com/billing/signup#/start?
本文ubuntu中安裝Docker是直接參考官方教程:https://docs.docker.com/install/linux/docker-ce/ubuntu/
安裝的時候最好切換到root賬號進(jìn)行安裝
ubuntu的遠(yuǎn)程是通過putty,具體怎么用可以百度
四、發(fā)布并部署服務(wù)
1、創(chuàng)建Dockerfile、發(fā)布應(yīng)用程序
這是我的工程目錄,構(gòu)建鏡像是通過Dockerfile來構(gòu)建的。
VS2017 是支持自動構(gòu)建Dockerfile文件,工程右鍵-添加-Docker支持
下面是我的Dockerfile的內(nèi)容
FROM microsoft/aspnetcore:2.1 //基礎(chǔ)鏡像,這里是.net core的基礎(chǔ)運(yùn)行環(huán)境WORKDIR /publish //創(chuàng)建工程目錄
COPY . /publish //將當(dāng)前目錄拷貝到鏡像中,注意 COPY . 后面又空格
EXPOSE 80 //容器對外暴露80端口
ENTRYPOINT ["dotnet", "ZY.Gateway.dll"] //啟動容器內(nèi)的服務(wù)
//這里相當(dāng)于構(gòu)建鏡像的命令,是逐行執(zhí)行
需要設(shè)置Dockerfile的編譯為輸出到發(fā)布目錄
以上都設(shè)置好以后,通過VS發(fā)布程序
發(fā)布成功后,在工程目錄的bin/release目錄下找到我們的發(fā)布后的文件
其他服務(wù)的發(fā)布跟以上發(fā)布類似
2、上傳到ubuntu中
通過WinScp工具進(jìn)行上傳,將三個服務(wù)都上傳到服務(wù)器,WinScp怎么用,可以百度一下
3、構(gòu)建鏡像
docker build -t apigateway . //構(gòu)建網(wǎng)關(guān)鏡像docker build -t identityserver -f /home/ubuntu/dockerapp/identityserver/publish/Dockerfile .?//構(gòu)建認(rèn)證服務(wù)鏡像
docker build -t testserver -f /home/ubuntu/dockerapp/testserver/publish/Dockerfile .?//構(gòu)建測試服務(wù)鏡像
-t //鏡像名稱
-f //dockerfile文件路徑
docker images //查看鏡像?4、運(yùn)行容器
鏡像已經(jīng)在前面構(gòu)建完成,這一步會根據(jù)構(gòu)建的鏡像來運(yùn)行容器,將我們的服務(wù)跑起來
docker run -d -p 5000:80 --name apigateway_container apigatewaydocker run -d -p 6000:80 --name identityserver_container identityserver
docker run -d -p 7000:80 --name testserver_container testserver
//分別將網(wǎng)關(guān)服務(wù),認(rèn)證服務(wù),測試服務(wù)容器跑起來
//-d 保持后臺進(jìn)程運(yùn)行 -p 端口映射,{主機(jī)端口}:{容器端口}
?通過命令查看容器運(yùn)行情況
docker ps -a在配置網(wǎng)關(guān)服務(wù)的時候會涉及到容器與容器之間的網(wǎng)絡(luò)訪問,Docker在安裝的時候會創(chuàng)建一個172.17.0.1的IP網(wǎng)關(guān),可以通過172.17.0.1來做端口的轉(zhuǎn)發(fā)。
通過命令可以查看docker0的網(wǎng)關(guān)
Api網(wǎng)關(guān)的路由轉(zhuǎn)發(fā)配置
5、調(diào)用服務(wù)
?通過Postman來調(diào)用通過Docker運(yùn)行的服務(wù),通過API網(wǎng)關(guān)訪問認(rèn)證服務(wù)獲取Token
?
整個Docker的安裝,服務(wù)的發(fā)布,鏡像的打包,容器的運(yùn)行就全部完成。
整個過程不是一氣呵成的,踩了不少坑,在踩坑的過程中也學(xué)到和理解了很多東西。
下一篇會介紹通過docker-compose進(jìn)行發(fā)布,通過docker-compose可以實(shí)現(xiàn)一行命令將完成所有服務(wù)的構(gòu)建鏡像和運(yùn)行鏡像過程。
https://www.cnblogs.com/zyrmb/p/10509524.html? //這是我記錄的關(guān)于Docker相關(guān)的命令,可以參考
https://yeasy.gitbooks.io/docker_practice/content/? //這是針對Docker的整體介紹
總結(jié)
以上是生活随笔為你收集整理的Docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core 沉思录 - L
- 下一篇: VS2017 无法连接到Web服务器“I