Я только начал пользоваться докером. Мне удалось создать файл компоновки докеров, который развертывает три компонента моего приложения с необходимым количеством репликаций на одном хосте. Я хочу воспроизвести то же самое на нескольких хостах. У меня есть три процесса: A [7 копий], B [1 копия], C [1 копия] Я следил за руководством по созданию роя на веб-сайте докеров, и мне удалось создать менеджера и прикрепить к нему двух воркеров.
Итак, теперь, когда я запускаю свою команду
docker stack deploy --compose-file docker-compose.yml perf
Он действительно порождает необходимое количество машин, но все они находятся в самом менеджере. В идеале я бы хотел, чтобы они создавали C и B в диспетчере и объявляли копии A, распределенные между worker 1 и worker 2. Вот мой файл 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 для службы A и контейнером для службы B, учитывая, что они находятся на разных хост-машинах.
Сначала ты должен бежать
docker node ls
И проверьте, все ли ваши узлы доступны. Если да, то вы должны проверить, есть ли у воркеров образы, необходимые для запуска контейнеров.
Я бы также попробовал с ограничением, используя вместо этого идентификатор каждого узла, вы можете увидеть идентификаторы с помощью предыдущей команды.
@Imrak Я задавался вопросом, является ли документ docker-compose правильным или нет, потому что в документе, который я где-то упоминал, чтобы распределить службу A между 2 рабочими, что, если присутствует несколько рабочих, docker позаботится об этом самостоятельно?
Да, одна служба Docker с несколькими репликами по умолчанию масштабируется.
Как упоминал @BretFisher, докер будет масштабироваться по умолчанию. Примечание. Исключение составляют случаи, когда вы запускаете службу в глобальном режиме, когда каждый узел запускает отдельный экземпляр. docs.docker.com/engine/reference/commandline/service_scale/…
Несколько советов и ответов:
scheduler
и т. д. Сделайте имена служб простыми, чтобы их было легко использовать / запоминать в своей виртуальной сети.local
, как и обычные команды докера. Если у вас есть общее хранилище, вы можете использовать подключаемый модуль драйвера тома с store.docker.com, чтобы обеспечить подключение общего хранилища к правильному узлу.docker node ls
и, возможно, docker service ls
и docker node ps <managername>
, чтобы мы помогли устранить неполадки.Большое спасибо @Bret, это многое проясняет, я действительно заставил рой работать, возникла проблема с тем, что он теперь работает с образами контейнера. Я прочитал один из ваших других ответов, где вы рекомендуете Rex-ray, я попробую использовать его для настойчивости. Просто интересно, позволяет ли rex Ray нескольким клиентам читать и писать на общем томе хранения? или я могу добиться этого с помощью плагина драйвера тома?
В основном мне нужно передать данные из службы C в 7 копий службы A, даже если я использую отдельные тома, поэтому в любой момент к этому тому будут подключены две службы A и C. Я не думаю, что RexRay позволяет это, есть ли другой плагин, который я могу использовать для этого? Может, Флокер?
В случае большинства драйверов громкости они просто позволяют вам использовать любой базовый общее хранилище, который вы хотите. Характеристики хранилища что будут определять, можете ли вы иметь несколько подключений для чтения / записи к этому тому хранилища. Например: AWS EBS и DigitalOcean Block Storage позволяют подключаться только одному контейнеру за раз (взаимно однозначное отношение). AWS EFS допускает соединение «многие к одному», поскольку он спроектирован как сетевое хранилище NFS. REX-Ray просто автоматизирует процесс подключения.
Флокер мертв. Если вам нужна полная репликация файлов, подумайте о portworx.com, но я думаю, он все равно не будет правильно открывать файлы (например, базы данных). Для этого вам нужна репликация на уровне приложения (кластеры баз данных и т. д.)
Мое основное требование - чтобы несколько приложений совместно использовали некоторые файлы, прежде чем пытаться докеризовать всю настройку, я использовал простую общую папку в Windows для этих целей. Насколько я понимаю, я думаю, что раздел NFS должен работать за меня?
Запуск до 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
как том в контейнерах.
привет, да, я выполнил команду в соответствии с инструкциями в документации для проверки, рабочие подключены к менеджеру. Для подключения я использовал команду с выходом, когда я запускаю диспетчер.