如何使用docker-compose实现滚动更新?

weixin_38113326 2019-09-12 11:10:41
我在docker compose中有以下设置 > nginx用于代理前端,后端和服务图像端口8080上的后端应用程序(弹簧启动)>端口4000上的前端应用程序(SSR节点)>后端使用的mysql 前端可以相对快速地使用更新 docker-compose up -d --no-deps frontend 不幸的是,后端大约需要1分钟才能启动. 是否有一种简单的方法可以实现更低的停机时间而无需过多地更改当前设置?我喜欢它现在有多简单. 我会想象: >启动后端的新实例>等到它开始(它可能是每个计时器或健康测试>关闭以前运行的实例
...全文
650 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38117521 2019-09-12
  • 打赏
  • 举报
回复
Swarm是正确的解决方案,但是使用docker-compose仍然可以做到这一点. 首先,确保您的代理可以进行服务发现.您不能使用container_name(因为您不能在swarm中使用它),因为您将增加同一服务的容器数量.像traefik或nginx-proxy这样的代理使用标签来执行此操作. 然后,docker-compose up -d –scale backend = 2 –no-recreate这将创建一个带有新图像的新容器,而不会触及正在运行的图像. 在它启动并运行后,docker kill old_container,然后docker-compose up -d –scale backend = 1 –no-recreate只是为了重置数字. 编辑1 docker kill old_container应该是docker rm -f old_container 编辑2 how to handle even and not even runs 我们想要永远杀死最旧的容器 docker rm -f $(docker ps --format "table {{.ID}} {{.Names}} {{.CreatedAt}}" | grep backend | (read -r; printf "%s\n" "$REPLY"; sort -k 3 ) | awk -F " " '{print $1}' | head -1)

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧