docker compose下滚动更新
·
适用于nacos作为注册中心
1、暴露以下接口
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/actuator")
public class GracefulShutdownController {
private final NacosServiceManager nacosServiceManager;
@GetMapping("graceful_shutdown")
public R shutdown() throws NacosException {
nacosServiceManager.nacosServiceShutDown();
log.info("nacos客户端已关闭");
return R.ok();
}
}
2、在服务器执行命令
# 你的容器名称
CONTAINER_NAME=web-app
# 获取容器id
PREVIOUS_CONTAINER=$(docker ps --format "table {{.ID}} {{.Names}} {{.CreatedAt}}" | grep $CONTAINER_NAME | awk -F " " '{print $1}')
echo " 开始构建新容器"
docker-compose -f ../crm-compose.yml up --build -d --no-deps --scale $CONTAINER_NAME=2 --no-recreate $CONTAINER_NAME
# 容器内执行优雅关闭
docker exec -it $PREVIOUS_CONTAINER curl -X GET http://localhost:4100/actuator/graceful_shutdown
sleep 60
echo "启动成功, 正在移除副本"
docker kill -s SIGTERM $PREVIOUS_CONTAINER
sleep 1
docker rm -f $PREVIOUS_CONTAINER
docker-compose -f ../crm-compose.yml up -d --no-deps --scale $CONTAINER_NAME=1 --no-recreate $CONTAINER_NAME
echo "done!"
更多推荐
所有评论(0)