我有一个docker-compose文件,它在同一主机中部署了8种不同的docker服务。是否可以将其部署在不同的主机中?,我想在一个主机中部署一些服务,在其他主机远程部署另一个服务。我需要使用docker-swarm吗?或者是一种更简单的方法吗?
我已经读过可以使用DOCKER_HOST完成,但如果我使用此变量配置/ etc / default / docker,所有服务都将在远程主机上运行,我需要的是一个远程主机中的一些服务和其他远程主机中的其他服务。
答案 0 :(得分:10)
我们现在可以用docker compose v3来做到这一点。
https://docs.docker.com/engine/swarm/#feature-highlights https://docs.docker.com/compose/compose-file/
您必须使用命令
初始化群集群集 $ docker swarm init
您可以添加更多节点作为工作人员或经理 -
将两个节点添加到群集后,传递compose v3即部署文件以创建堆栈。撰写文件应该只包含预定义的图像,你不能在Swarm模式下提供Docker文件进行部署。
$ 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:
答案 1 :(得分:7)
对于要部署到多个主机的单个docker-compose.yml,您需要使用独立群(不是更新的群模式,但这种情况正在迅速变化)。启动一个swarm管理器,将每个主机定义为其swarm的成员,然后你可以使用docker-compose.yml中的约束来定义在哪些主机上运行哪些服务。
您还可以将docker-compose.yml拆分为多个文件,每个主机一个,然后运行多个docker-compose up命令,并为每个文件定义不同的DOCKER_HOST值。
在这两种情况下,您都需要将docker安装配置为在网络上侦听,这应该通过在这些套接字上配置TLS来完成。 This documentation描述了您需要做的事情。
答案 2 :(得分:3)
答案 3 :(得分:1)
您可能还需要考虑使用Overnode工具-它是自动化多主机docker-compose之上的容器编排工具。这是从单主机docker-compose部署的最简单过渡。 (免责声明:我是作者,它是最近出版的)