Docker и docker-compose: жизненный цикл контейнеров
У меня вопрос по архитектуре системы, где несколько контейнеров взаимодействуют между собой.
Пускай у меня в docker-compose.yml описана система контейнеров.
Но "время существования" у них разное:
среди контейнеров есть "долгоживущие" - например, база данных, контейнер с которой запущен постоянно. И котрую используют несколько других контейнеров.
Или nginx, который служит прокси для соединения "снаружи к внутренним ресурсам".
А есть короткоживущие, построенные для решения одной конкретной задачи по принципу "подняться, сходить на внешний сайт, записать результат в базу и умереть".
Всё это описано в одном докер-композе, и работает в пределах одной networks.
И вот проблема: я поднял всю эту конструкцию, у меня отработал короткоживущий контейнер (и умер, завершив свою работу).
До тех пор, пока я не выполню что то вроде docker-compose stop - мои "длинноживущие" контейнеры продолжают работать.
И меня это устраивает!
Но время от времени мне надо опять запустить мой "короткоживущий" контейнер - например, по крону.
Как бы это сделать? То есть, как запустить контейнер так, чтобы он при запуске оказался в той же самой networks и мог взаимодействовать с остальными "долгоживущими" контейнерами?
Потому что каждый раз останавливать-запускать всю эту балалайку - это гораздо дольше, чем "пнуть" один конкретный контейнер.
Мне в голову приходит - сделать еще один docker-compose.yml, в котором описан только один этот "короткоживущий" контейнер, и та же самая networks, но так не получается, потому что у меня "короткоживущий" контейнер зависит от "долгоживущего", а он уже запущен.
Буду благодарен за советы!
Ответы (1 шт):
В docker-compose up можно указывать имена сервисов
docker-compose up SERVICE1 [SERVICE2 [SERVICE3 ...]]
см. https://docs.docker.com/compose/reference/up
Таким образом, при первом запуске команды docker-compose up происходит запуск всех контейнеров - и тех, которые Вы называете "долгоживущими", и тех, которые Вы называете "короткоживущими".
Пускай теперь "коротроживущий" контейнер отработал. Все остальные "долгоживущие" контейнеры запущены, в этом можно убедиться, вызвав docker ps
Можно выполнить команду docker-compose up c именем этого "короткоживущего" контейнера - и он опять запустится, и при этом будет взаимодействовать с теми, котрые уже запущены.