Я исследовал, прежде чем спрашивать здесь, но все ответы приводят меня к одному и тому же выводу:
- Создайте свой стек Docker Compose локально
- Пометьте и отправьте изображения в реестр (частный или общедоступный, например Docker Hub)
- Переместите стек в рой, используя
docker stack deploy --compose-file docker-compose.yml stackdemo
- Отсюда стек берет и «вытягивает» образы из реестра и запускает контейнеры.
Нет ли простого способа заставить следующий (я думаю, здравый смысл) сценарий работать без проблем?
- У Docker Swarm Manager есть доступ (ключи SSH) для извлечения проекта из Git.
- Он периодически извлекает проект и строит его «локально», используя
docker-compose up
- Когда сборка завершается успешно (контейнеры готовы), он отправляет стек в рой с помощью
docker stack deploy
, распространяя изображения на все рабочие узлы. - Таким образом, исходный «исходный код» известен только узлу Manager, и только он имеет прямой доступ к репозиторию Git.
Ведение реестра (или оплата облачного) кажется огромным недостатком для использования Docker в режиме Swarm.
Боковое примечание: я пробовал подход развертывание реестра как службы в стеке и добавление тегов + отправка изображений в 127.0.0.1/myimage
, но это привело к другому набору собственных проблем - например, тот факт, что рабочие узлы, на которых не запущен экземпляр контейнера реестра, не имеют доступа для извлечения образа (реестр необходимо реплицировать на все узлы).