docker 堆栈部署不更新配置
docker stack deploy does not update config
尝试使用 docker 堆栈部署设置零停机部署,docker 集群单节点本地主机环境。
构建镜像demo:latest
后,第一次部署使用命令docker stack deploy --compose-file docker-compose.yml demo
可以看到4个副本运行并且可以在我本地机器上的端口8080上访问nginx默认主页。现在更新 index.html
,构建具有相同名称和标签的映像 运行 docker stack deplopy 命令导致以下错误,更改未反映出来。
删除部署并重新创建会起作用,但我想看看如何在不停机的情况下进行更新。请在这里帮忙。
错误
Updating service demo_demo (id: wh5jcgirsdw27k0v1u5wla0x8)
image demo:latest could not be accessed on a registry to record
its digest. Each node will access demo:latest independently,
possibly leading to different nodes running different
versions of the image.
Dockerfile
FROM nginx:1.19-alpine
ADD index.html /usr/share/nginx/html/
docker-compose.yml
version: "3.7"
services:
demo:
image: demo:latest
ports:
- "8080:80"
deploy:
replicas: 4
update_config:
parallelism: 2
order: start-first
failure_action: rollback
delay: 10s
rollback_config:
parallelism: 0
order: stop-first
TLDR:构建镜像后将其推送到注册表
如果没有 public 或私有 docker 注册表,Docker swarm 将无法正常工作。基本上所有节点都需要从同一个地方获取它们的图像,而注册表是共享该信息的机制。还有其他方法可以在 swarm 中的每个节点上加载图像,但它涉及在每个节点上一次一个地执行相同的命令来加载图像,这不是很好。
或者,您可以对配置数据使用 docker 配置,而不是每次都重建映像。在没有注册表的情况下,这也可以很好地工作,并且您可以在几乎没有停机时间的情况下换出配置数据:
尝试使用 docker 堆栈部署设置零停机部署,docker 集群单节点本地主机环境。
构建镜像demo:latest
后,第一次部署使用命令docker stack deploy --compose-file docker-compose.yml demo
可以看到4个副本运行并且可以在我本地机器上的端口8080上访问nginx默认主页。现在更新 index.html
,构建具有相同名称和标签的映像 运行 docker stack deplopy 命令导致以下错误,更改未反映出来。
删除部署并重新创建会起作用,但我想看看如何在不停机的情况下进行更新。请在这里帮忙。
错误
Updating service demo_demo (id: wh5jcgirsdw27k0v1u5wla0x8)
image demo:latest could not be accessed on a registry to record
its digest. Each node will access demo:latest independently,
possibly leading to different nodes running different
versions of the image.
Dockerfile
FROM nginx:1.19-alpine
ADD index.html /usr/share/nginx/html/
docker-compose.yml
version: "3.7"
services:
demo:
image: demo:latest
ports:
- "8080:80"
deploy:
replicas: 4
update_config:
parallelism: 2
order: start-first
failure_action: rollback
delay: 10s
rollback_config:
parallelism: 0
order: stop-first
TLDR:构建镜像后将其推送到注册表
如果没有 public 或私有 docker 注册表,Docker swarm 将无法正常工作。基本上所有节点都需要从同一个地方获取它们的图像,而注册表是共享该信息的机制。还有其他方法可以在 swarm 中的每个节点上加载图像,但它涉及在每个节点上一次一个地执行相同的命令来加载图像,这不是很好。
或者,您可以对配置数据使用 docker 配置,而不是每次都重建映像。在没有注册表的情况下,这也可以很好地工作,并且您可以在几乎没有停机时间的情况下换出配置数据: