Docker Swarm - 我应该在部署堆栈之前删除堆栈吗?

Docker Swarm - Should I remove a stack before deploying a stack?

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

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

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

我不确定 swarm 的部署命令是否足够聪明,可以判断出 docker 映像已更改并且需要执行某些操作。

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

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