Docker-compose: 在多个主机中部署服务
Docker-compose: deploying service in multiple hosts
我有一个 docker-compose 文件,它在同一主机中部署了 8 个不同的 docker 服务。是否可以将它部署在不同的主机上?我想在一台主机上远程部署一些服务,在另一台主机上远程部署另一项服务。我需要使用 docker-swarm 吗?还是更简单的方法?
我读到可以使用 DOCKER_HOST 来完成,但是如果我用这个变量配置 /etc/default/docker,所有服务都将在远程主机上 运行,什么我需要的是一台远程主机中的一些服务,以及另一台远程主机中的其他服务。
使用 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/
[ docker-compose.yml v3 之前的原始答案]
要将单个 docker-compose.yml 部署到多个主机,您需要使用独立 swarm(不是较新的 swarm 模式,但这种模式正在迅速改变)。启动一个 swarm 管理器,将每个主机定义为其 swarm 的成员,然后您可以在 docker-compose.yml 中使用约束来定义哪些服务 运行 在哪些主机上。
您也可以将 docker-compose.yml 分成几个文件,每个主机一个,然后 运行 多个 docker-组合命令,使用为每个定义的不同 DOCKER_HOST 值。
在这两种情况下,您都需要配置 docker 安装以侦听网络,这应该通过在这些套接字上配置 TLS 来完成。 This documentation 描述了您需要为此做什么。
你可以使用docker组成version 3 which provides ability to do multi host deployment without using multiple compose files. All you need is to define labels for each node in the cluster and use the label name for placement约束。
我们现在可以使用 docker compose v3 来做到这一点。
https://docs.docker.com/engine/swarm/#feature-highlights
https://docs.docker.com/compose/compose-file/
您必须使用命令初始化 swarm 集群
$ docker swarm init
您可以添加更多节点作为工作者或管理者 -
将两个节点都添加到集群后,传递您的 compose v3 即部署文件以创建堆栈。 Compose 文件应该只包含预定义的图像,你不能为在 Swarm 模式下部署提供 Dockerfile。
$ docker stack deploy -c dev-compose-deploy.yml --with-registry-auth PL
查看您的堆栈服务状态 -
$ docker stack services PL
尝试使用Labels & Placement 约束将服务放在不同的节点上。
示例 "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:
您可能还需要考虑 Overnode 工具 - 它是自动化 multi-host docker-compose 之上的容器编排工具。这是从 single-host docker-compose 部署最简单的过渡。 (免责声明:我是作者,最近出版)
我有一个 docker-compose 文件,它在同一主机中部署了 8 个不同的 docker 服务。是否可以将它部署在不同的主机上?我想在一台主机上远程部署一些服务,在另一台主机上远程部署另一项服务。我需要使用 docker-swarm 吗?还是更简单的方法?
我读到可以使用 DOCKER_HOST 来完成,但是如果我用这个变量配置 /etc/default/docker,所有服务都将在远程主机上 运行,什么我需要的是一台远程主机中的一些服务,以及另一台远程主机中的其他服务。
使用 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/
[ docker-compose.yml v3 之前的原始答案]
要将单个 docker-compose.yml 部署到多个主机,您需要使用独立 swarm(不是较新的 swarm 模式,但这种模式正在迅速改变)。启动一个 swarm 管理器,将每个主机定义为其 swarm 的成员,然后您可以在 docker-compose.yml 中使用约束来定义哪些服务 运行 在哪些主机上。
您也可以将 docker-compose.yml 分成几个文件,每个主机一个,然后 运行 多个 docker-组合命令,使用为每个定义的不同 DOCKER_HOST 值。
在这两种情况下,您都需要配置 docker 安装以侦听网络,这应该通过在这些套接字上配置 TLS 来完成。 This documentation 描述了您需要为此做什么。
你可以使用docker组成version 3 which provides ability to do multi host deployment without using multiple compose files. All you need is to define labels for each node in the cluster and use the label name for placement约束。
我们现在可以使用 docker compose v3 来做到这一点。
https://docs.docker.com/engine/swarm/#feature-highlights https://docs.docker.com/compose/compose-file/
您必须使用命令初始化 swarm 集群
$ docker swarm init
您可以添加更多节点作为工作者或管理者 -
将两个节点都添加到集群后,传递您的 compose v3 即部署文件以创建堆栈。 Compose 文件应该只包含预定义的图像,你不能为在 Swarm 模式下部署提供 Dockerfile。
$ docker stack deploy -c dev-compose-deploy.yml --with-registry-auth PL
查看您的堆栈服务状态 -
$ docker stack services PL
尝试使用Labels & Placement 约束将服务放在不同的节点上。
示例 "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:
您可能还需要考虑 Overnode 工具 - 它是自动化 multi-host docker-compose 之上的容器编排工具。这是从 single-host docker-compose 部署最简单的过渡。 (免责声明:我是作者,最近出版)