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掉