Docker-compose實戰

北漂碼農有話說發表於2020-08-05

Docker-compose實戰

各位小夥伴們,我們前面的篇文章分享了、docker的基礎知識點、如何編寫一個Dockerfiledocker網路是怎麼回事、如何編寫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-serviceorder-client-feign服務的配置也需要修改為如下配置:

eureka:
  client:
    service-url:
      defaultZone: http://EurekaServer:8761/eureka

啟動Compose

進入到docker-compose.yml檔案所在目錄執行如下命令,然後瀏覽器輸入http://localhost:8761/

docker-compose up

看到如下畫面,說明我們利用docker-composeSpringCloud服務編排成功了

驗證

我們執行如下命令進入到order-client-feign容器內部

# 首先執行,找到服務執行的容器
docker ps
#然後執行下面命令,進入到容器
docker exec -it af01ed522b98  /bin/bash 
# 然後訪問服務提供者的介面
curl -v http://localhost:9001/query

出現如下結果,表示在容器內部我們也能夠訪問到介面,併成功返回結果

小結

好啦,小夥伴們,本文我們討論了,如何將自己的SpringCloud微服務,使用Dockerfile進行服務構建,並使用docker-compose進行服務編排,併成功編排完成。相關程式碼案例以上傳到 GitHub,當然,作者只是編排了三個服務,小夥伴們可以自行拉取程式碼,將其他的服務一併進行編排試驗。

相關文章