Как использовать Docker Swarm Mode для обмена данными между контейнерами? - PullRequest
0 голосов
/ 02 мая 2018

Я только начал использовать докер. Мне удалось создать файл создания докера, который развертывает три компонента моего приложения с необходимым количеством репликаций на одном хосте. Я хочу повторить то же самое с несколькими хостами сейчас. У меня есть три процесса A [7 копий], B [1 копия], C [1 копия] Я следовал руководству по созданию роя на веб-сайте докера, и мне удалось создать менеджера и подключить к нему двух рабочих.

Так что теперь, когда я запускаю свою команду

 docker stack deploy --compose-file docker-compose.yml perf

Он порождает необходимое количество машин, но все они в самом менеджере. В идеале я хотел бы, чтобы они порождали C и B в менеджере и добавляли копии A, распределенные между работником 1 и работником 2.
Вот мой докер - составьте файл

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 для Service A и контейнером для Service B, если они находятся на разных хостах

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Несколько советов и ответов:

  • для служебных названий я не рекомендую заглавные буквы. Используйте действительные имена хостов DNS (в нижнем регистре, без специального символа, кроме -).
  • имя_ контейнера не поддерживается в рое и не требуется. Похоже, C: должно быть что-то вроде scheduler и т. Д. Сделайте имена служб простыми, чтобы их было легко использовать / запоминать в их виртуальной сети.
  • Все сервисы в одном файле компоновки всегда находятся в одной и той же докерной сети в Swarm (и docker-compose для локальной разработки), поэтому нет необходимости в сетевом назначении или перечислении.
  • перезагрузка: всегда не требуется в рое. Этот параметр не используется и в любом случае используется по умолчанию. Если вы используете его для docker-compose, это редко требуется, так как вы обычно не хотите, чтобы приложения были в цикле респауна во время ошибок, которые обычно приводят к состоянию процессора. Я рекомендую оставить это.
  • В томах используется «драйвер тома». По умолчанию local, как обычные команды Docker. Если у вас есть общее хранилище, вы можете использовать плагин драйвера тома из store.docker.com, чтобы убедиться, что общее хранилище подключено к правильному узлу.
  • Если у вас все еще есть проблемы с назначением задач работника / менеджера, укажите выходные данные docker node ls и, возможно, docker service ls и docker node ps <managername>, чтобы мы помогли устранить неполадки.
0 голосов
/ 02 мая 2018

Сначала вы должны бежать docker node ls И проверьте, все ли ваши узлы доступны. Если это так, вам следует проверить, есть ли у работников изображения, необходимые для запуска контейнеров. Я также попытался бы использовать ограничение с использованием идентификатора каждого узла. Вы можете увидеть идентификаторы с помощью предыдущей команды.

...