Единая бд для апи и веба в docker?

Добрый день.

Есть 2 работающий приложения:
- апи написанное на люмене для моб. приложений
- веб приложение на laravel
Они находятся в разных репозиториях, и для них настроено CI/CD. Они используют единную базу.
В веб приложении настроил docker-compose (4 сервиса php, nginx, mysql, redis). Запустил, все работает как надо.

Вопрос в том как в апи в docker-compose указать что бы использовало существующие контейнер базы?
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
@tasiuk
Для решения этой проблемы, нужно создать дополнительную сеть, с драйвером bridge, в стаке с сервисами к которым вы хотите предоставить доступ (подключиться).

После создания сети, нужно указать какие контейнеры должы подключиться к сети во время запуска, что бы получить к ним доступ из другого стака.

Пример:

docker-compose.laravel.yml
services:
    mysql: 
      image: ...
      networks:
         - default
         - my_private_network

    redis: 
      image: ...
      networks:
         - default
         - my_private_network

networks:
  my_private_network:
    name: my_private_network
    driver: bridge


docker-compose.lumen.yml
php-fpm:
    image: ...
    networks:
      - default
      - my_private_network

networks:
  my_private_network:
    external: true
    name: my_private_network

- В первом стаке мы создаем новую сеть, и подключаем нужные нам контейнеры;

- Во втором стаке мы объявляем о существовании сети которая была создана ранее, и так же подключаем наш php-fpm контейнер, к этой сети, что бы коммуницировать с другими контейнерами по сети;

После этого, в стаке для Lumen вы можете смело подключиться к контейнерам mysql, redis по их алиасам, как и ранее:

Lumen .env
DB_HOST=mysql
REDIS_HOST=redis


Успехов!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы