Docker-compose實戰
各位小夥伴們,我們前面的篇文章分享了、docker
的基礎知識點、如何編寫一個Dockerfile
、docker
網路是怎麼回事、如何編寫docker-compose.yml
檔案。已經為本文做好了充分的鋪墊。
那麼這邊文章就和小夥本們分享如何將你自己的微服務專案進行服務的編排。
準備
要想編排專案,首先我們得有一個專案。不要著急,作者給大家準備了一個自己的SpringCloud
的專案,包含服務註冊中心、服務的提供者、服務的消費者、配置中心等。本文我們會用到其中的三個服務來進行服務編排。專案GitHub地址,專案結構如下圖:
❝說明:本次我們只會用到其中的三個服務,
❞eureka-server
:服務註冊中心,order-server
:訂單服務,order-client-feign
:訂單查詢服務
開始
在進行服務編排以前,我們需要給要給要編排的服務編寫Dockerfile
檔案。首先來編寫eureka-server
:服務註冊中心的檔案
建立Dockerfile
檔案
將專案clone
到你的本地,開啟專案根目錄,建立Dockerfile
檔案,併為為專案編寫Dockerfile
檔案,至於Dockerfile
檔案的每一行命令是什麼意思,請參考Dockerfile你值得擁有 如下圖:
構建映象
如果小夥伴們還不知道如何構建映象,請看這篇文章 Dockerfile你值得擁有 ,在執行以下命令之前先將jar
包打出來。即eureka-server-0.0.1-SNAPSHOT.jar
執行如下倆行命令
# 構建映象
docker build -f /Users/wangyupeng/IdeaProjects/cloud-framework/eureka-server/Dockerfile .
# 指定映象倉庫個tag
docker build -t cloud-framework/eureka:1.0 .
執行完命令後,我們執行docker images
,檢視是否有我們的映象生成,如下圖
同理,我們完成order-server
:訂單服務,order-client-feign
:訂單查詢服務的映象構建工作。映象倉庫和映象tag
分別是cloud-framework/order-client-feign:1.0
和,cloud-framework/order-server:1.0
如下圖,可見,我們自己構建的docker
映象。
❝這裡忘記了一件重要的事情,由於
❞docker
預設的網路模式是bridge
參考:docker網路,各個容器的IP
都不相同,所以我們需要給Eureka Server
,配置一個主機名:EurekaServer
,所有的微服務都使用主機名連線註冊中心。
修改配置
首先將註冊中心的配置進行修改:
# 原配置
eureka:
instance:
hostname: localhost
# 設定不檢索其他服務
client:
fetch-registry: false
# 不註冊自己
register-with-eureka: false
## 服務註冊地址
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 修改為
eureka:
# 設定Eureka的hostname
instance:
hostname: EurekaServer
# 設定不檢索其他服務
client:
fetch-registry: false
# 不註冊自己
register-with-eureka: false
# 服務註冊地址
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
將服務消費與提供者的配置修改如下
eureka:
client:
service-url:
defaultZone: http://EurekaServer:8761/eureka
重新構建映象
按上面的構建映象的步驟,分別生成新的映象。
編寫docker-compose.yml
檔案
version: '3.8'
services:
eureka-server:
image: cloud-framework/eureka:1.0
container_name: cloud_eureka
hostname: EurekaServer
ports:
- "8761:8761"
networks:
- cloudnetwork
order-server:
image: cloud-framework/order-service:1.0
container_name: cloud_order-server
ports:
- "8081:8081"
links:
- eureka-server:EurekaServer
networks:
- cloudnetwork
depends_on:
- eureka-server
order-client:
image: cloud-framework/order-client-feign:1.0
container_name: cloud_order-client
ports:
- 9001:9001
links:
- eureka-server:EurekaServer
networks:
- cloudnetwork
depends_on:
- eureka-server
networks:
cloudnetwork:
driver: bridge
❝以上都是一些常規的配置,包括服務的名稱,所用的映象,容器的名稱,埠的對映,使用的網路,其中
❞depends_on
配置的意思是,本服務需要依賴eureka-server
,還有需要注意的一點是:由於docker
預設的網路模式bridge
,所以需要修改eureka-server
服務的配置
# 將hostname由變為localhost EurekaServer
eureka:
# 設定Eureka的hostname
instance:
hostname: EurekaServer
# 設定不檢索其他服務
client:
fetch-registry: false
# 不註冊自己
register-with-eureka: false
# 服務註冊地址
service-url:
defaultZone: http://EurekaServer:${server.port}/eureka/
❝同樣的
❞order-service
和order-client-feign
服務的配置也需要修改為如下配置:
eureka:
client:
service-url:
defaultZone: http://EurekaServer:8761/eureka
啟動Compose
進入到docker-compose.yml
檔案所在目錄執行如下命令,然後瀏覽器輸入http://localhost:8761/
docker-compose up
看到如下畫面,說明我們利用docker-compose
將SpringCloud
服務編排成功了
驗證
我們執行如下命令進入到order-client-feign
容器內部
# 首先執行,找到服務執行的容器
docker ps
#然後執行下面命令,進入到容器
docker exec -it af01ed522b98 /bin/bash
# 然後訪問服務提供者的介面
curl -v http://localhost:9001/query
出現如下結果,表示在容器內部我們也能夠訪問到介面,併成功返回結果
小結
好啦,小夥伴們,本文我們討論了,如何將自己的SpringCloud
微服務,使用Dockerfile
進行服務構建,並使用docker-compose
進行服務編排,併成功編排完成。相關程式碼案例以上傳到 GitHub,當然,作者只是編排了三個服務,小夥伴們可以自行拉取程式碼,將其他的服務一併進行編排試驗。