Docker-compose:在多个主机上部署服务

62

我有一个 docker-compose 文件,可以在同一主机上部署8个不同的 Docker 服务。是否有可能将其部署在不同的主机上?我想在一个主机上部署一些服务,在另一个主机上部署其他服务。我需要使用 docker-swarm 吗?还是有更简单的方法?

我已经阅读过可以使用 DOCKER_HOST 进行操作,但如果我在 /etc/default/docker 中配置此变量,则所有服务都将在远程主机上运行,而我需要的是将某些服务部署到一个远程主机上,将其他服务部署到其他远程主机上。

4个回答

26

以下是供参考的“dev-compose-deploy.yml”文件示例 -

version: "3"

services:

  nginx:
    image: nexus.example.com/pl/nginx-dev:latest
    extra_hosts:
      - "dev-pldocker-01:10.2.0.42”
      - "int-pldocker-01:10.2.100.62”
      - "prd-plwebassets-01:10.2.0.62”
    ports:
      - "80:8003"
      - "443:443"
    volumes:
      - logs:/app/out/
    networks:
      - pl
    deploy:
      replicas: 3
      labels:
        feature.description: “Frontend”
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: any
      placement:
        constraints: [node.role == worker]
    command: "/usr/sbin/nginx"

  viz:
    image: dockersamples/visualizer
    ports:
      - "8085:8080"
    networks:
      - pl
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    deploy:
      replicas: 1
      labels:
        feature.description: "Visualizer"
      restart_policy:
        condition: any
      placement:
        constraints: [node.role == manager]

networks:
pl:

volumes:
logs:

22

使用Docker Swarm模式,您可以使用以下命令部署版本3的Compose YML文件:

docker stack deploy -c docker-compose.yml $your_stack_name

v3语法删除了一些不适用于Swarm模式的功能,例如链接和依赖项。您还应该注意,默认情况下,卷是本地存储在节点上的。否则,v3语法与您可能已经使用的v2语法非常相似。有关更多详细信息,请参见以下内容:

https://docs.docker.com/compose/compose-file/

https://docs.docker.com/engine/swarm/


[ v3之前的docker-compose.yml原始答案 ]

要使用单个docker-compose.yml部署到多个主机,您需要使用独立的Swarm(还不是较新的Swarm模式,但这正在迅速改变)。启动一个Swarm管理器,并将每个主机定义为其Swarm的成员,然后您可以在docker-compose.yml中使用约束来定义哪些服务在哪些主机上运行。

您还可以将docker-compose.yml拆分为多个文件,每个文件对应一个主机,然后运行多个docker-compose up命令,对于每个命令都定义一个不同的DOCKER_HOST值。

在两种情况下,您都需要配置docker安装以监听网络,这应该通过在这些套接字上配置TLS来完成。 此文档描述了您需要执行的操作。


但这意味着您仍然需要Swarm,是吗?还是我理解错了?我也面临相同的情况,希望将2个服务部署到2个不同的主机上。不确定只有docker-compose能否实现此目的,还是必须与docker swarm一起使用。能否请您澄清一下? - Finlay Weber
@FinlayWeber 目前在 Docker 中最佳实践是使用 Swarm Mode(不要与经典 Swarm 混淆)。它采用与 docker-compose 用于单节点任务相同的 docker-compose.yml 输入。 - BMitch
感谢您对“经典Swarm”的澄清。我实际上对此感到困惑。谢谢! - Finlay Weber

7
您可以使用 Docker Compose 版本 3,它提供了在不使用多个 compose 文件的情况下进行多主机部署的能力。您所需做的就是为集群中的每个节点定义标签,并在 放置 约束中使用标签名称。

但是需要创建一个Swarm集群吗?或者我该如何定义不同的主机标签以便区分它们? - Asier Gomez
要使用放置功能,您需要使用Swarm。 - meswapnilk

3

您可能还想考虑使用Overnode工具-它是一种基于自动多主机Docker Compose的容器编排工具。它是从单主机Docker Compose部署最简单的过渡方式。(免责声明:我是作者,并且最近被发布)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接