2

我创建了一个 docker 映像来运行清漆。它通过了清漆 .vcl 配置文件,设置了自定义端口并且它可以工作。我正在一台服务器上推出多个容器,每个容器都有自定义配置和端口。所以我写了一个docker-compose.yml文件来定义它。使用docker stack deploy我可以让它们全部运行。

如果我想调整 docker 图像,问题就来了。目前,我正在更新docker-compose.yml文件中的版本并重新运行docker stack deploy关闭所有 docker 并再次启动它们的命令。我想错开重新部署,以便一次更新一个,因为一次完成所有这些会导致服务器上的大量负载,随着我们的扩展只会变得更糟。

我怎样才能做到这一点?对于这种情况是否有更好的方法?

提前致谢!

当前 docker-compose.yml 文件:

version: "3"
services:
  test-site-one:
    image: test/varnish:v7.3
    deploy:
      restart_policy:
        condition: on-failure
    ports:
      - "8080:80"
    volumes:
      - /path/to/magento.vcl:/etc/varnish/default.vcl
  test-site-two:
    image: test/varnish:v7.3
    deploy:
      restart_policy:
        condition: on-failure
    ports:
      - "8081:80"
    volumes:
      - /path/to/magento.vcl:/etc/varnish/default.vcl
  test-site-three:
    image: test/varnish:v7.3
    deploy:
      restart_policy:
        condition: on-failure
    ports:
      - "8082:80"
    volumes:
      - /path/tp/magento.vcl:/etc/varnish/default.vcl
4

2 回答 2

0

您可以在您的 Compose 文件中指定 update_config,如此处所述https://docs.docker.com/compose/compose-file/#update_config

根据文档:

配置应如何更新服务。对于配置滚动更新很有用。

  • 并行度:一次更新的容器数量。
  • delay:更新一组容器之间的等待时间。
  • failure_action:如果更新失败怎么办。继续、回滚或暂停之一(默认值:暂停)。
  • monitor:每次任务更新后监控失败的持续时间(ns|us|ms|s|m|h)(默认 0s)。
  • max_failure_ratio:更新期间容忍的失败率。
  • order:更新期间的操作顺序。stop-first(旧任务在开始新任务之前停止)或 start-first(新任务先启动,正在运行的任务短暂重叠)之一(默认 stop-first)注:仅支持 v3.4 及更高版本.

version: '3.4' services: vote: image: dockersamples/examplevotingapp_vote:before depends_on: - redis deploy: replicas: 2 update_config: parallelism: 2 delay: 10s order: stop-first

于 2018-06-19T10:27:39.333 回答
0

您可以将这些服务拆分为它们自己的docker-compose_<num>.yml文件,然后您只需运行适当的部署命令docker stack deploy ms -c docker-compose_<num>.yml。如果他们需要按顺序运行,那么只需将每个部署命令放在一个脚本中,如果需要的话,在脚本之间加上 sleep 命令。

于 2019-06-06T14:00:57.640 回答