我刚开始使用docker。我能够创建一个docker compose文件,该文件部署了我的应用程序的三个组件,并在一个主机中具有必要的复制数。 我想复制相同的东西,现在有多个主机。 我有三个过程A [7份],B [1份],C [1份] 我在docker网站上关注了创建swarm教程,并设法创建了一个管理器并将两个工作者连接到它。
所以现在当我运行我的命令
docker stack deploy --compose-file docker-compose.yml perf
它确实产生了所需数量的机器,但它们都在管理器本身中。 理想情况下,我希望他们在经理中产生C和B,并且在工人1和工人2之间分配A的副本 这是我的docker -compose文件
version: '3'
services:
A:
image: A:host
tty: true
volumes:
- LogFilesLocationFolder:/jmeter/log
- AntOutLogFolder:/antout
- ZipFilesLocationFolder:/zip
deploy:
replicas: 7
placement:
constraints: [node.role == worker]
networks:
- perfhost
B:
container_name: s1_perfSqlDB
restart: always
tty: true
image: mysql:5.5
environment:
MYSQL_ROOT_PASSWORD: ''
volumes:
- mysql:/var/lib/mysql
ports:
- "3306:3306"
deploy:
placement:
constraints: [node.role == manager]
networks:
- perfhost
C:
container_name: s1_scheduler
image: C:host
tty: true
volumes:
- LogFilesLocationFolder:/log
- ZipFilesLocationFolder:/zip
- AntOutLogFolder:/antout
networks:
- perfhost
deploy:
placement:
constraints: [node.role == manager]
ports:
- "7000:7000"
networks:
perfhost:
volumes:
mysql:
LogFilesLocationFolder:
ZipFilesLocationFolder:
AntOutLogFolder:
B)如果我确实这样做了,我如何使用卷在Conatiner for Service A和服务B的容器之间传输数据,因为它们位于不同的主机上
答案 0 :(得分:1)
一些提示和答案:
scheduler
等等。使服务名称简单,以便在虚拟网络上易于使用/记忆。local
,就像普通的docker命令一样。如果您有共享存储,则可以使用store.docker.com中的卷驱动程序插件来确保共享存储连接到正确的节点。docker node ls
以及docker service ls
和docker node ps <managername>
的输出提供给我们,以帮助我们进行问题排查。答案 1 :(得分:0)
首先你应该跑步
docker node ls
并检查您的所有节点是否都可用。如果是,则应检查工人是否具有运行容器所需的图像。
我也会尝试使用每个节点的id来约束,你可以使用上一个命令看到id。
答案 2 :(得分:0)
在docker stack deploy
之前运行:
mkdir /srv/service/public
docker run --rm -v /srv/service/public:/srv/service/public my-container-with-data cp -R /var/www/app/public /srv/service/public
使用可怕的/srv/service/public
作为容器中的体积。