我有一个 docker-compose 文件,可以在同一主机上部署8个不同的 Docker 服务。是否有可能将其部署在不同的主机上?我想在一个主机上部署一些服务,在另一个主机上部署其他服务。我需要使用 docker-swarm 吗?还是有更简单的方法?
我已经阅读过可以使用 DOCKER_HOST 进行操作,但如果我在 /etc/default/docker 中配置此变量,则所有服务都将在远程主机上运行,而我需要的是将某些服务部署到一个远程主机上,将其他服务部署到其他远程主机上。
我有一个 docker-compose 文件,可以在同一主机上部署8个不同的 Docker 服务。是否有可能将其部署在不同的主机上?我想在一个主机上部署一些服务,在另一个主机上部署其他服务。我需要使用 docker-swarm 吗?还是有更简单的方法?
我已经阅读过可以使用 DOCKER_HOST 进行操作,但如果我在 /etc/default/docker 中配置此变量,则所有服务都将在远程主机上运行,而我需要的是将某些服务部署到一个远程主机上,将其他服务部署到其他远程主机上。
现在我们可以使用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
尝试使用标签和放置约束条件将服务放在不同的节点上。
以下是供参考的“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:
使用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来完成。 此文档描述了您需要执行的操作。
您可能还想考虑使用Overnode工具-它是一种基于自动多主机Docker Compose的容器编排工具。它是从单主机Docker Compose部署最简单的过渡方式。(免责声明:我是作者,并且最近被发布)
docker-compose
用于单节点任务相同的docker-compose.yml
输入。 - BMitch