使用 docker-compose 与 docker swarm
Use docker-compose with docker swarm
我正在使用 docker 1.12.1
我有一个简单的 docker-compose 脚本。
version: '2'
services:
jenkins-slave:
build: ./slave
image: jenkins-slave:1.0
restart: always
ports:
- "22"
environment:
- "constraint:NODE==master1"
jenkins-master:
image: jenkins:2.7.1
container_name: jenkins-master
restart: always
ports:
- "8080:8080"
- "50000"
environment:
- "constraint:NODE==node1"
我运行这个脚本用docker-compose -p jenkins up -d
。
这将创建我的 2 个容器,但仅限于我的主容器(从我执行命令的地方)。我希望在主服务器上创建一个,在节点上创建一个。
我也尝试添加
networks:
jenkins_swarm:
driver: overlay
和
networks:
- jenkins_swarm
每次服务后都失败了:
Cannot create container for service jenkins-master: network jenkins_jenkins_swarm not found
当我执行 docker network ls
时创建了网络
有人可以帮助我使用 docker-compose 在我的 2 个节点上部署 2 个容器。 Swarm 正在致力于我的 "cluster"。我按照this教程来验证。
Compose 目前不支持群模式。
当您在主节点上 运行 docker compose up
时,Compose 会为 Compose 文件中的服务发出 docker run
命令,而不是 docker service create
- 这就是为什么master 上的所有容器 运行。有关选项,请参阅 this answer。
关于第二点,网络范围在 1.12
。如果您检查您的网络,您会发现它是在 swarm 级别创建的,但 Compose 是 运行ning 引擎级容器,无法看到 swarm 网络。
我们现在可以使用 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:
我正在使用 docker 1.12.1
我有一个简单的 docker-compose 脚本。
version: '2'
services:
jenkins-slave:
build: ./slave
image: jenkins-slave:1.0
restart: always
ports:
- "22"
environment:
- "constraint:NODE==master1"
jenkins-master:
image: jenkins:2.7.1
container_name: jenkins-master
restart: always
ports:
- "8080:8080"
- "50000"
environment:
- "constraint:NODE==node1"
我运行这个脚本用docker-compose -p jenkins up -d
。
这将创建我的 2 个容器,但仅限于我的主容器(从我执行命令的地方)。我希望在主服务器上创建一个,在节点上创建一个。
我也尝试添加
networks:
jenkins_swarm:
driver: overlay
和
networks:
- jenkins_swarm
每次服务后都失败了:
Cannot create container for service jenkins-master: network jenkins_jenkins_swarm not found
当我执行 docker network ls
有人可以帮助我使用 docker-compose 在我的 2 个节点上部署 2 个容器。 Swarm 正在致力于我的 "cluster"。我按照this教程来验证。
Compose 目前不支持群模式。
当您在主节点上 运行 docker compose up
时,Compose 会为 Compose 文件中的服务发出 docker run
命令,而不是 docker service create
- 这就是为什么master 上的所有容器 运行。有关选项,请参阅 this answer。
关于第二点,网络范围在 1.12
。如果您检查您的网络,您会发现它是在 swarm 级别创建的,但 Compose 是 运行ning 引擎级容器,无法看到 swarm 网络。
我们现在可以使用 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: