Связь между докерными контейнерами на разных серверах - PullRequest
0 голосов
/ 09 января 2019

У меня есть один сервер, на котором работает веб-сайт вместе с nginx, которые находятся в их собственных контейнерах докеров. У меня есть совершенно отдельный сервер, на котором работает postgres внутри контейнера.

Как мне установить связь между двумя серверами, чтобы веб-сайт на первом сервере мог использовать базу данных на втором сервере?

Это прекрасно работает локально, потому что я могу просто использовать docker compose и запускать все в одной и той же сети Docker. В качестве альтернативы я также могу запустить контейнеры отдельно и указать для них внешнюю сеть, которая снова работает хорошо. Однако я не уверен, как заставить все это работать на производстве, на разных серверах (vps).

Мне известны такие вещи, как Kubernetes, которые, я думаю, могли бы помочь с этим, но у меня нет опыта в этом, и я бы предпочел этого избежать, сохраняя при этом все это как можно более простым / ванильным. Это только для личных проектов, и мои навыки лежат в развитии, а не в devops.

1 Ответ

0 голосов
/ 09 января 2019

Вы настроили свои контейнеры точно так же, как если бы база данных работала на удаленном хосте, но не в Docker: настройте их с именем другого хоста в качестве хоста базы данных и соответствующим именем базы данных, учетными данными для входа, & гр. Вы должны убедиться, что контейнер базы данных настроен на разрешение внешних подключений (docker run -p 3306:3306 или -p 5432:5432, в зависимости от ситуации); он не обязательно должен быть в конфигурации Docker Compose с одним хостом.

Как более общий вопрос, Docker сам по себе не дает особой помощи, если данный клиент и сервер находятся на разных хостах, даже если оба находятся в Docker. Вы можете настроить вещи так, чтобы они использовали только физические имена хостов, игнорируя пространство Docker и повторное развертывание, если вы перемещаете рабочие нагрузки; вы можете развернуть реестр сервисов, например Consul , который знает, где работают сервисы и может сообщить клиентам; или установить оверлейную сеть (также покупая в контейнерный оркестр Docker's Swarm). Это также связано с тем, как вы развертываете рабочие нагрузки, и ваш выбор может отличаться, если вы используете Ansible, или можете терпеть установку полнофункционального менеджера кластеров, или настаиваете на использовании только команд docker run или docker-compose.

...