#docker #docker-compose
Вопрос:
У меня есть 3 docker-файла для создания различных проектов.
Первый-база данных MySQL, второй-мое приложение, а третий-другое приложение, которое я создал.
Как я могу указать в своем приложении compose использовать базу данных из MySQL compose?
Я мог бы поместить их все в 1 файл compose, но когда я изменю версии, мне нужно будет использовать команду docker-compose down, и это будет означать, что MySQL также будет недоступен, чего я не могу себе позволить, мне нужно, чтобы он работал 24/7 без перерыва, так как он находится в производстве.
В моем файле конфигурации приложения я указал подключение к MySQL, чтобы использовать имя контейнера/бд и правильное имя пользователя и передать.
Любая помощь была бы очень признательна.
Комментарии:
1. Docker-compose позволяет выполнять команды только в одной службе. Например,
docker-compose stop app
отключил бы только службуapp
в docker-compose. В противном случае, если у вас есть несколько независимых файлов docker-compose, вам необходимо сопоставить каждый необходимый порт контейнера с хостом, а затем определить канал связи через хост. Но, конечно, вы теряете уровень изоляции, открывая свой контейнерный порт на хосте. Я всегда предпочитаю использовать единую конфигурацию docker-compose и адаптировать свои команды к моим потребностям.2. Работает ли это, чтобы указать DNS-имя хоста стабильной рабочей базы данных (даже если это один и тот же физический хост)? Поскольку, как вы заметили, база данных и приложение имеют очень разные жизненные циклы, может иметь смысл игнорировать детали реализации, что база данных находится в контейнере.
Ответ №1:
Если вы хотите изменить версии БД, вам всегда придется удалить контейнер или обратиться к другим средствам для выполнения ETL с новой БД, а затем выполнить переключение через DNS.
Если вы имеете в виду «когда приложение изменит версию», база данных будет перезапущена, то я полагаю, что вы можете ошибаться.
Использование docker-compose up
позволит воссоздать контейнер приложения с новым изображением и оставить другой контейнер БД без изменений, если конфигурация не изменилась.
Однако, чтобы ответить на ваш первоначальный вопрос, вы можете разрешить контейнерам общаться друг с другом, назначив их одной и той же сети докеров, назначенная пользователем сеть моста будет хорошо соответствовать вашим потребностям:
https://docs.docker.com/compose/networking/
Я бы рекомендовал создать сеть, внешнюю по отношению к docker-compose
файлу, а затем использовать ее для вашей базы данных и приложения. Затем вы можете использовать соответствующее имя контейнера для подключения к базе данных
https://docs.docker.com/compose/networking/#use-a-pre-existing-network
Комментарии:
1. Большое вам спасибо, мне не хватало только внешнего параметра в моем файле создания.