使用docker-compose執行微服務專案#eureka+config+auth+gateway+module

小酒館發表於2018-11-29

微服務架構中我們使用了必須的四個元件,eureka config gateway auth

其中config依賴eurekaauth依賴前兩者,gateway又依賴auth

這樣就確定了四個元件的啟動順序為 ,eurekaconfigauthgateway

既然有依賴,那就肯定會使用depends_on引數,但是這個引數只會判斷容器啟動沒有,並不會去判斷容器是否能用,就像你建立了一個nginx映象的容器,容器啟動後並不代表能立馬訪問;

所有就需要使用健康檢查 healthcheck

我的思路是容器建立啟動後去訪問baidu,如果能訪問成功,則判斷容器啟動成功,健康狀態為healthy,但是前提是容器有curl命令

其實上面的方法還是不嚴謹,目前也還在學習,因為存在一種可能就是容器可以去訪問baidu了,並不一定代表外部容器能訪問這個容器!

四個元件都加入了建立的自定義橋接網路中,與其他業務隔離

後面的第二個docker-compose.yaml檔案,是業務模組容器,因為也要加入當前網路中,所以使用了external_links引數,external_linkslinks的區別就是前者可連線非當前compose定義的網路中

networks:
  default:
    external:
      name: fbl-base_fbl

external_links的使用,需要定義networks為compose外部的已建立的網路名稱

networks:
  fbl:
    driver: bridge

在第一個compose中自定義了名為fbl的橋接網路

以下僅供學習使用,生產請勿使用!

第一個compose:

# 版本不同,部分語法不同,比如healthcheck在2版本就不能使用,2.1就可以
version: `2.1`
services:
  fbl-eureka:
# 構建映象,依賴Dockerfile檔案
    build:
      context: ./
      dockerfile: Dockerfile-eureka
# 容器名稱
    container_name: fbl-eureka
# 容器主機名
    hostname: fbl-eureka
# 設定環境變數,這裡是設定的時區
    environment:
      - TZ=Asia/Shanghai
# 掛載日誌檔案到宿主機
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
# 暴露埠
    ports:
      - 1025:1025
# 重啟模式
# no,預設策略,在容器退出時不重啟容器
# on-failure,在容器非正常退出時(退出狀態非0),才會重啟容器
# on-failure:3,在容器非正常退出時重啟容器,最多重啟3次
# always,在容器退出時總是重啟容器
# unless-stopped,在容器退出時總是重啟容器,但是不考慮在Docker守護程式啟動時就已經停止了的容器
    restart: always
# 健康檢查
    healthcheck: 
      test: ["CMD-SHELL", "curl -f http://baidu.com && exit 0 || exit 1"] 
# 檢查間隔時間
      interval: 10s
# 檢查請求超時時間,超時則為失敗
      timeout: 3s
# 可以的失敗次數
      retries: 10
# 加入的網路
    networks:
      - fbl

  fbl-config:
# 連線容器eureka,因為容器都在fbl網路中,可以直接用容器名連線
    links:
      - fbl-eureka:eureka
    build:
      context: ./
      dockerfile: Dockerfile-config
    container_name: fbl-config
    hostname: fbl-config
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
    ports:
      - 1111:1111
  # 依賴於eureka啟動,當eureka正常啟動,健康狀態為healthy時,啟動該容器
    depends_on:
      fbl-eureka:
        condition: service_healthy
    restart: always
    healthcheck: 
      test: ["CMD-SHELL", "curl -f http://baidu.com && exit 0 || exit 1"]
      interval: 10s
      timeout: 3s
      retries: 10
    networks:
      - fbl

  fbl-auth:
    links:
      - fbl-eureka:eureka
    build:
      context: ./
      dockerfile: Dockerfile-auth
    container_name: fbl-auth
    hostname: fbl-auth
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
    ports:
      - 3000:3000
    depends_on:
      fbl-config:
         condition: service_healthy
    restart: always
    healthcheck: 
      test: ["CMD-SHELL", "curl -f http://baidu.com && exit 0 || exit 1"]
      interval: 10s
      timeout: 3s
      retries: 10
    networks:
      - fbl

  fbl-gateway:
    links:
      - fbl-eureka:eureka
      - fbl-auth:auth
    build:
      context: ./
      dockerfile: Dockerfile-gateway
    container_name: fbl-gateway
    hostname: fbl-gateway
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
    ports:
      - 9999:9999
    depends_on:
      fbl-auth:
         condition: service_healthy       
    restart: always
    healthcheck: 
      test: ["CMD-SHELL", "curl -f http://baidu.com && exit 0 || exit 1"]
      interval: 10s
      timeout: 3s
      retries: 10
    networks:
      - fbl

networks:
  fbl:
    driver: bridge

第二個compose,為依賴四大元件的模組服務

version: `2.1`
services:
  fbl-findhousewx-service1:
    build:
      context: ./
      dockerfile: Dockerfile-findhousewx
    container_name: fbl-findhousewx1
    hostname: fbl-findhousewx1
    healthcheck: 
      test: ["CMD-SHELL", "curl -f http://baidu.com && exit 0 || exit 1"] 
      interval: 10s
      timeout: 3s
      retries: 10
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
    external_links:
      - fbl-eureka:eureka
      - fbl-config:config
    ports:
      - 4020:4020
    restart: always

networks:
  default:
    external:
      name: fbl-base_fbl

相關文章