我刚刚开始使用docker。我能够创建一个 docker 组合文件,该文件部署了我的应用程序的三个组件,并在一个主机中进行了必要数量的复制。 我想复制同样的东西,现在有多个主机。 我有三个进程 A[7 份] ,B [ 1 份] ,C [1 份] 我按照docker网站上的创建群教程进行操作,并设法创建了一个管理器并附加了两个worker。
所以现在当我运行我的命令时
docker stack deploy --compose-file docker-compose.yml perf
它确实生成了所需数量的机器,但所有这些都在管理器本身中。 理想情况下,我希望它们在管理器中生成 C 和 B,并生成在工作线程 1 和工作线程 2 之间分发的 A 副本。
这是我的码头工人-撰写文件
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(如果我确实得到了这个工作,我如何使用卷在服务A的Conatiner和服务B的容器之间传输数据,因为它们在不同的主机上
一些提示和答案:
- 对于服务名称,我不建议使用大写字母。使用有效的 DNS 主机名(小写,除 - 外没有特殊字符(。
- container_name在 Swarm 中不受支持,因此不需要。看起来像 C:应该是类似
scheduler
等。使服务名称简单,以便在其虚拟网络上易于使用/记住。 - 单个撰写文件中的所有服务始终位于 swarm 中的同一 docker 网络上(以及用于本地开发的 docker-compose(,因此无需网络分配或列出。
- 重新启动:在 Swarm 中始终不需要。该设置不会被使用,无论如何都是默认设置。如果您将其用于 docker-compose,则很少需要它,因为您通常不希望应用程序在错误期间处于重生循环中,这通常会导致 CPU 争用条件。我建议把它关掉。 卷
- 使用"卷驱动程序"。默认值为
local
,就像普通的 docker 命令一样。如果您有共享存储,则可以使用 store.docker.com 中的卷驱动程序插件来确保共享存储连接到正确的节点。 - 如果您仍然遇到工作人员/经理任务分配问题,请放置
docker node ls
的输出,也许docker service ls
和docker node ps <managername>
,以便我们帮助进行故障排除。
首先你应该运行docker node ls
并检查您的所有节点是否都可用。如果是,则应检查辅助角色是否具有运行容器所需的映像。 我也会尝试使用每个节点的 id 来代替约束,您可以使用上一个命令查看 ids。
在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
作为容器中的体积。