Как запустить 3-уровневое приложение на докере, работающем на 3 разных CentOS с использованием vagrant,

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

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
218
1

Ответы 1

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

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

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

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

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

это задание для меня, поэтому я должен сделать это таким образом.

Faheem Ali 20.01.2019 15:31

также я использовал эту команду docker run -d -p 3306:3306 --name dmysql -e MYSQL_ROOT_HOST=% MYSQL_ROOT_PASSWORD=vagrant my-mysql здесь my-mysql - это мой образ mysql-сервера, который строится с базой данных и скриптом для таблиц , я могу получить доступ к этой таблице в контейнере на том же CentOS, но не могу подключиться к ней удаленно из 2-го Centos

Faheem Ali 20.01.2019 15:32

все еще я не могу подключиться к базе данных, я пробовал оба IP-адреса, 192.168.10.87 это IP-адрес Centos, я не могу подключиться к mariadb, используя это, но 172.17.0.2 это IP-адрес докера для сервера mysql, оба эти IP-адреса не подключают меня к mysql док-контейнер

Faheem Ali 20.01.2019 15:35

IP-адреса docker inspect часто бесполезны, и вам, вероятно, никогда не следует их искать. В вашем примере одна виртуальная машина не может получить доступ к внутренним IP-адресам Docker на другой виртуальной машине (и, вероятно, даже использует те же IP-адреса для своих собственных контейнеров).

David Maze 20.01.2019 16:14

Хорошо, Дэвид Мейз, я даже не могу пропинговать этот IP-адрес докера, поэтому я знаю, что он не работает.

Faheem Ali 20.01.2019 16:36

хорошо, спасибо, все готово, я использовал свой IP-адрес Centos для подключения, моя ошибка заключалась в том, что я забыл указать порт в Dockerfile,

Faheem Ali 21.01.2019 09:18

Другие вопросы по теме