微服務架構中我們使用了必須的四個組件, `config gateway auth` 其中 依賴 ,`auth gateway auth` 這樣就確定了四個組件的啟動順序為 , 既然有依賴,那就肯定會使用 參數,但是這個參數只會判斷容器啟動沒有,並不會去判斷容器是否能用,就像你創建了一個nginx鏡像 ...
微服務架構中我們使用了必須的四個組件,eureka
config
gateway
auth
其中config
依賴eureka
,auth
依賴前兩者,gateway
又依賴auth
這樣就確定了四個組件的啟動順序為 ,eureka
-- config
-- auth
-- gateway
既然有依賴,那就肯定會使用depends_on
參數,但是這個參數只會判斷容器啟動沒有,並不會去判斷容器是否能用,就像你創建了一個nginx鏡像的容器,容器啟動後並不代表能立馬訪問;
所有就需要使用健康檢查 healthcheck
我的思路是容器創建啟動後去訪問baidu,如果能訪問成功,則判斷容器啟動成功,健康狀態為healthy,但是前提是容器有curl
命令
其實上面的方法還是不嚴謹,目前也還在學習,因為存在一種可能就是容器可以去訪問baidu了,並不一定代表外部容器能訪問這個容器!
四個組件都加入了創建的自定義橋接網路中,與其他業務隔離
後面的第二個docker-compose.yaml
文件,是業務模塊容器,因為也要加入當前網路中,所以使用了external_links
參數,external_links
與links
的區別就是前者可連接非當前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