首页 > 解决方案 > Docker Swarm - 我应该在部署堆栈之前删除堆栈吗?

问题描述

我不是 Docker 新手,但我是 Docker Swarm 的新手。

我们的部署通常包括使用最新代码构建一个新的 docker 镜像,将其推送到我们的注册表,然后docker stack deploy针对 compose 文件运行。

我的问题是,我需要docker stack rm $STACK_NAME在运行部署之前运行吗?

我不确定 swarm 的部署命令是否足够聪明,可以确定 docker 映像已更改并且它需要做一些事情。

标签: dockerdeploymentdocker-swarm

解决方案


您重新部署相同的堆栈名称而不删除旧堆栈。如果您希望从撰写文件中删除服务,那么您需要包含该--prune选项。对于任何未更改的服务,swarm 将使其保持不变。但是对于任何有更改的服务,包括注册服务器上的新映像,您将看到根据您在撰写文件中指定的更新配置执行的滚动更新。

当您使用默认 VIP 连接到服务时,只要服务存在,即使在滚动更新时,VIP 也会保持相同的 IP 地址,以便连接到您的服务的其他容器可以这样做,而不必担心过时的 DNS 引用. 通过复制服务,滚动更新可以防止任何可见的中断。两者的结合为您提供了在删除和重新创建 swarm 堆栈时所不具备的高可用性。


推荐阅读