Соединение контейнеров Rails и Postgres без Docker Compose - PullRequest
1 голос
/ 19 октября 2019

Я знаю, что Docker Compose (compose) - это инструмент, который, среди прочего, значительно упрощает настройку взаимосвязанности между контейнерами, но я пытаюсь практиковать это без компоновки, чтобы увидеть, на что похож этот процесс (и получить более глубокую оценкудля создания в долгосрочной перспективе).

Это причина, по которой трудно запустить приложение (в моем случае rails) + сервер SQL без компоновки, потому что они являются изолированными модулями, поэтому они не знают о каждомдругие файловые системы и так не знают, как найти друг друга, и поэтому мы используем compose? Есть ли другая причина?

Как бы вы подошли к подключению контейнеров без использования compose? Если это полезно, я разместил некоторые метаданные о двух контейнерах ниже.

Когда запускается проверка докера на моем контейнере postgres, я вижу ENV и конфигурацию сети:

"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/12/bin",
"PGDATA=/var/lib/postgresql/data"
]

"Networks": {
"bridge": {
"NetworkID": "e68fdafe2110067389853515b05b09cd0ce75c500190fae85abff82417794b7f",
"EndpointID": "0d5564c073286bf7c1d708d52146653cf75705f34c1e175963eba4c158424399",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"MacAddress": "02:42:ac:11:00:02",
}
}

А для контейнера rails:

"Env": [
"PATH=/usr/local/bundle/bin:/usr/local/bundle/gems/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
]

"Networks": {
"bridge": {
"NetworkID": "e68fdafe2110067389853515b05b09cd0ce75c500190fae85abff82417794b7f",
"EndpointID": "e76ad694f04b7ca07e388ab39ab81b00409500d4c175b5ce9f90a8c740da7246",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"MacAddress": "02:42:ac:11:00:03",
}
}

1 Ответ

1 голос
/ 19 октября 2019

Docker compose удобен, когда у вас есть куча контейнеров, и вы хотите запустить / остановить всю среду, используя отдельные команды, такие как docker-compose up или docker-compose down. И, как вы заметили, он также создает некоторые общие вещи, которые помогают контейнерам общаться друг с другом - например, сети.

Если вы хотите усложнить себе задачу, вы всегда можете не использовать compose и запускать свои контейнеры вручную и соединять их. в общую сеть:

docker network create mynetwork

это создаст сеть с именем mynetwork с драйвером по умолчанию bridge. Затем вам нужно будет запустить ваши контейнеры и подключить их к этой сети:

docker container run --network mynetwork --name container1 image1
docker container run --network mynetwork --name container2 image2

, и это похоже на то, что делает compose - вы можете получить доступ к этим контейнерам через эту сеть по DNS-именам - container1 иcontainer2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...