Я отправил этот вопрос изначально на Docker forums, но не получил ответа.Docker compose: можно моделировать ленивый запуск зависимых сервисов?
Мне интересно, как наилучшим образом будет модель набора услуг, назовем их db
, web
и batch
. db
- это просто исполняемый экземпляр сервера базы данных (думаю, MySQL). web
- это веб-приложение, которое необходимо подключить к базе данных. batch
- пакетное приложение, которому необходимо подключиться к той же базе данных (он может/будет работать параллельно с web
). db
должен быть запущен либо для web
, либо для batch
. Но web
или batch
могут запускаться независимо друг от друга (один или оба могут работать одновременно). Если оба они запускаются одновременно, они должны разговаривать с одним экземпляром базы данных (поэтому db
фактически использует volumes_from
отдельный контейнер объема данных). Так что если вариант использования был проще (подумайте только db
и web
, которые всегда работают вместе), тогда они просто оба будут определены как сервисы в одном файле компоновки, с web
со ссылкой на db
.
Насколько я понимаю, они не могут быть определены в одной конфигурации Docker. Вместо этого мне понадобились бы три разные конфигурации. Один для db
, который запускается первым, один для web
(который использует external_links
, чтобы найти db
), и третий для batch
(который также использует external_links
, чтобы найти db
). Это правильно или есть какой-то механизм, который я не рассматриваю? Предполагая, что требуется настройка с несколькими конфигурациями, существует ли способ «лениво» инициализировать композицию db
, если она не работает, когда запускаются либо композиции web
310, либо batch
?
Это вопрос о том, как правильно использовать другие приложения в зависимости от базы данных. Но я до сих пор неясно, имеет ли Docker или Docker Compose встроенное средство для * запуска самой базы данных * в момент запуска любой из зависимых служб (что, очевидно, должно было бы обрабатывать состояние, в котором БД еще не установлена Бег). –
Docker и docker-compose оба не имеют понятия о том, что происходит внутри контейнеров. И это не их бизнес, чтобы знать, что это – Thomasleveil
Это правильно. Однако docker-compose позволяет вам внешне определять эти зависимости (через 'links',' external_links' и т. П.). Мой вопрос был предназначен в этом контексте моделирования. –