Docker-compose:在多个主机

时间:2016-11-22 08:51:38

标签: docker docker-compose dockerfile docker-swarm

我有一个docker-compose文件,它在同一主机中部署了8种不同的docker服务。是否可以将其部署在不同的主机中?,我想在一个主机中部署一些服务,在其他主机远程部署另一个服务。我需要使用docker-swarm吗?或者是一种更简单的方法吗?

我已经读过可以使用DOCKER_HOST完成,但如果我使用此变量配置/ etc / default / docker,所有服务都将在远程主机上运行,​​我需要的是一个远程主机中的一些服务和其他远程主机中的其他服务。

4 个答案:

答案 0 :(得分:10)

示例“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:

答案 1 :(得分:7)

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

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

在这两种情况下,您都需要将docker安装配置为在网络上侦听,这应该通过在这些套接字上配置TLS来完成。 This documentation描述了您需要做的事情。

答案 2 :(得分:3)

您可以使用docker compose version 3,它可以在不使用多个撰写文件的情况下执行多主机部署。您所需要的只是为集群中的每个节点定义标签,并使用placement约束的标签名称。

答案 3 :(得分:1)

您可能还需要考虑使用Overnode工具-它是自动化多主机docker-compose之上的容器编排工具。这是从单主机docker-compose部署的最简单过渡。 (免责声明:我是作者,它是最近出版的)