0

我刚刚开始使用 docker 。我能够创建一个 docker compose 文件,该文件部署了我的应用程序的三个组件,在一个主机中具有必要数量的复制。我想复制同样的东西,现在有多个主机。我有三个进程 A[7 个副本],B [1 个副本],C [1 个副本] 我按照 docker 网站上的创建群教程,并设法创建了一个管理器并将两个工人附加到它。

所以现在当我运行我的命令时

 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)如果我确实让这个工作,我如何使用卷在服务 A 的 Conatiner 和服务 B 的容器之间传输数据,因为它们位于不同的主机上

4

3 回答 3

2

一些提示和答案:

  • 对于服务名称,我不建议使用大写字母。使用有效的 DNS 主机名(小写,除 - 外没有特殊字符)。
  • swarm 不支持 container_name,因此不需要。看起来像 C: 应该是类似scheduler的,等等。使服务名称简单,以便在他们的虚拟网络上易于使用/记住。
  • 单个 compose 文件中的所有服务始终位于 swarm 中的同一个 docker 网络上(以及用于本地开发的 docker-compose),因此不需要网络分配或列表。
  • restart:always 在 swarm 中不需要。该设置未使用,无论如何都是默认设置。如果您将它用于 docker-compose,则很少需要它,因为您通常不希望应用程序在错误期间处于重生循环中,这通常会导致 CPU 竞争条件。我建议把它关掉。
  • 卷使用“卷驱动程序”。默认是local,就像普通的 docker 命令一样。如果您有共享存储,您可以使用来自 store.docker.com 的卷驱动插件来确保共享存储连接到正确的节点。
  • 如果您仍然在工作人员/经理任务分配方面遇到问题,请将输出docker node ls和可能的结果放在一起docker service lsdocker node ps <managername>以便我们帮助解决问题。
于 2018-05-03T00:57:58.607 回答
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作为容器中的卷。

于 2020-08-24T09:09:16.993 回答
0

首先,您应该运行 docker node ls 并检查您的所有节点是否都可用。如果是,您应该检查工作人员是否拥有运行容器所需的映像。我也会尝试使用每个节点的 id 来进行约束,您可以使用上一个命令查看 id。

于 2018-05-02T14:59:39.923 回答