Несколько составных файлов обмениваются данными

#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. Большое вам спасибо, мне не хватало только внешнего параметра в моем файле создания.