В этой конфигурации, как вы ее описали, большая часть конфигурации идентична той, которую вы настроили бы без 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.