Как запустить 3-х уровневое приложение в Docker, работающем на 3 разных Centos с помощью Vagrant, - PullRequest
0 голосов
/ 20 января 2019

Я работаю над Vagrant и пытаюсь создать трехуровневое веб-приложение. Я устанавливаю 3 Centos на Vagrant, используя тот же файл vagrant.

Каждый Centos имеет докер, 1 centos имеет базу данных, 2 centos имеет сервер php apache, 3 centos имеет php apache и код на стороне клиента для отображения результата.

Все три синхронизированы и работают нормально, но когда я создал Docker-контейнер для первой базы данных MYSQL, я смог подключить его локально на том же Vm, но не смог подключиться через 2-ю виртуальную машину с Apache и PHP.

Кто-нибудь может мне помочь?

Также мне нужно протестировать это трехуровневое веб-приложение в Docker compose.

Как я могу это сделать? Нужно ли мне запускать все 3 на разных виртуальных машинах?

1 Ответ

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

В этой конфигурации, как вы ее описали, большая часть конфигурации идентична той, которую вы настроили бы без Docker.(И в этом нет ничего плохого!) Убедитесь, что:

  • Для каждой контейнерной службы запустите ее с опцией -p, чтобы опубликовать какой-либо порт из пространства Docker;например, служба MySQL, с которой вы будете запускать docker run -p 3306:3306 ... mysql:5.7.

  • Чтобы подключиться между службами, подключитесь к IP-адресу виртуальной машины, на которой размещается служба, и к опубликованному номеру порта (первый номер после опции -p).(Система обнаружения служб, такая как Consul , может помочь запомнить, какая служба на какой виртуальной машине.)

Вы не можете использовать Docker Compose с этой настройкой, кроме неевозможно, это более удобный способ записи параметров запуска каждой отдельной службы.

Если для вас важно использовать Docker Compose или другие инструменты, встроенные в Docker, вам придется запускать его максимум на одной виртуальной машине.(Если у вас есть хост Linux, вам вообще не нужна виртуальная машина; MacOS и некоторые установки Windows имеют настольные приложения, которые могут довольно хорошо скрывать виртуальную машину.) Поскольку контейнер Docker имеет некоторые сходства с виртуальной машиной (например, изолированная файловая система).более ориентированные на разработчика установки обычно полностью избегают виртуальных машин и, по-видимому, не часто используют VagrantЗдесь вы описываете совершенно хорошую архитектуру развертывания, но это то, что вы бы настроили с помощью стека Packer / Ansible с Docker в качестве детали реализации, а не с тем, что сначала делает Docker.

...