1.準備兩臺服務器,安裝好docker、docker-compose
因為用到了docker倉庫,安裝harbor,可以從github下載離線安裝包
2. 我這邊用到了gitlab-ci,整體流程也都差不多
1)打包mvn clean install
2)打鏡像 docker-compose -f docker-compose.yaml build
3) 登陸harbor
docker login -u admin -p *** 192.168.178
// 版本號可通過${CI_COMMIT_SHA:0:8}設置為每次提交的hash值,我這邊方便就寫laster了
4) 打tag docker tag 192.168.1.78/test/test-server:laster 192.168.1.78/test/test-server:laster
5) 上傳到harbor docker push 192.168.1.78/test/test-server:laster
docker-compose.yaml例子
version: '3.7'
services:test-server:build:context: ./server #context指明dockerfile路徑environment:- JAVA_OPS=${JVMOPS}- DB_OPS=${DBOPS}container_name: test-server #容器名hostname: test-serverimage: ${IMAGE_TAG} #鏡像名healthcheck: #健康檢查test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]interval: 10s #間隔時間timeout: 10sretries: 3 #重試次數start_period: 60s #開始時間deploy:mode: replicated #用戶可以指定集群中容器的數量(默認),global:每個節點一個replicas: 2 #replicated時指定共幾個容器# 更新配置restart_policy:condition: on-failure #非0退出容器后才重啟max_attempts: 1 #重啟1次update_config:# 每次更新數量parallelism: 1# 每次更新時間(更新完這個,就更新第二個)delay: 60sorder: start-first #首先啟動新任務, 并且正在運行的任務暫時重疊failure_action: continuenetworks:- default
networks:default:driver: overlayipam:config:- subnet: 10.0.2.0/24 #設置2網段,騰訊內網ip默認1網段,沖突了
6)拉鏡像 docker pull 192.168.1.78/test/test-server:laster
7) 運行 docker stack deploy -c docker-compose.yaml --with-registry-auth test
遇到的問題
- docker容器為10.0.1.0/24網絡段,和騰訊的內網ip沖突,所以在docker-compose.yaml中設置網絡段為2網段
- 更新時,流量還是會分發至重啟的節點,就肯定是訪問不到接口報錯了,后來百度說用健康檢查,所以在docker-compose.yaml中增加了 healthchek模塊,start_period試自己項目啟動時間設置
- 上一點雖說加了健康檢查 ,但是發現,啟動的容器,剛開始時strarting ,看日志已經啟動成功,但是過了一會就unhealth,就自動stop了,百度說是健康檢查失敗,但是docker logs看日志也沒錯,后來百度說看 docker inspect 容器名,有個state,Health的log,看到是找不到curl的命令,于是就在dockerfile中,增加了RUN apt update && apt install -y curl
- springboot的健康檢查,需依賴actuator組建,具體可以百度,本地運行時,可直接訪問提示{“status”:“UP”}
- order: start-first 后面測試發現,通過健康檢查后,舊的才會stop掉