Как использовать базу данных из первого проекта во втором через docker
Не давно мой тимлид сказал развернуть новый проект на локалке, который занимается Business Intelligence (BI) - анализом данных. И есть back чью базу нужно было использовать. Необходимо мне было bi проект развернуть на локальном проекте (bi делал не я). На проде все работает через кубернетес, тогда как в локальной разработке используем докер. На bi был уже готовый docker-compose который поднимал postgres и back. Самый простой вариант, это было либо сделать полный дамп таблицы на back проекте и импортироватьего в postgres контейнер на bi. Я подумал, что попробую я лучше сделать так чтобы bi пользовался back проекта.
Первым делом, я удалил создание postgres контейнера из bi проекта в docker-compose.yaml.
Далее мне нужно созать сеть(network) в которой будут находится два проекта, для этого использовал команду:
docker network create my_network
Для просмотра доступных сетей можно использовать команду:
docker network ls
Теперь мне нужно лишь сказать что два проекта находятся в одной сети.
Для первого проекта(куда хотим подключится) в самом конце добавляем секцию networks и прописываем имя сети:
networks:
my_network:
external: true
Последней строкой мы говорим, что нужно подключится к уже существцующей сети.
Далее во втором проекте, так же добавляем эту секцию и для php контейнера прописываем эту сеть
version: '2'
services:
back:
build: .
tty: true
env_file:
- .env
volumes:
- ./:/var/www/html
ports:
- '8080:80'
networks:
- my_network
networks:
my_network:
external: true
Теперь нужно лишь прописать изменить подключение к БД в конфиге. Показываю на примере yii2, поэтому иду в config/db.ph
$db = [
'class' => 'yii\db\Connection',
'dsn' => 'pgsql:host=postgres;port=5432;dbname=postgres',
'username' => env('DB_USER'),
'password' => env('DB_PASS'),
'charset' => 'utf8',
'enableLogging' => false
];
*dsn тоже вынесен в .env
host=postgres это имя контейнера в docker-compose первого проекта, порт там же прописывается, как и имя бд и логопасс.
После внесения всех необходимых изменений достаточно перезапустить проекты. Теперь BI успешно подключается к бэкенду и использует его базу данных.
Похожие статьи
Error response from daemon: all predefined address pools have been fully subnetted
При поднятии проекта возникает ошибка Error response from daemon: all predefined address pools have been fully subnetted
Читать дальше...