С введением нового «режим роя» в Docker 1.12 мы пытались перенести наше приложение на контейнеры и использовать оркестровку и кластеры режима роя.
Наше приложение требует, чтобы для его запуска были запущены некоторые начальные сценарии базы данных. Мы не упаковываем базу данных в наше докеризованное приложение, чтобы оно могло следовать архитектуре микросервисов без сохранения состояния, а несколько контейнеров в конечном итоге взаимодействовали бы с одним (на данный момент) экземпляром базы данных.
При создании службы мы не можем использовать --replicas
с командой create service
, так как несколько экземпляров попытаются создать таблицы в одной базе данных и потерпят неудачу. Хотя наши сценарии проверяли бы, настроена ли база данных, и пропускали бы создание, но так как все контейнеры запускаются одновременно, ее нельзя было бы использовать.
Нам не удалось найти какой-либо механизм ожидания, который мы могли бы использовать с докерами для решения этой проблемы. Было бы хорошо, если бы мы могли запустить второй контейнер только тогда, когда первый создал базу данных (и открыл порты), но как мы можем настроить для этого взаимодействие между контейнерами?
Кроме того, могут ли как-то помочь такие инструменты, как flywaydb?
Как это использовать в производстве?