Для чего в Docker используются кастомные bridge-сети и как их создать

Ответ

Кастомные bridge-сети в Docker создаются для изоляции групп контейнеров и организации их взаимодействия в рамках одной виртуальной сети, отделенной от сети по умолчанию (bridge).

Ключевые преимущества:

  • Изоляция: Контейнеры в разных кастомных сетях не могут общаться друг с другом напрямую, что повышает безопасность.
  • Встроенный DNS: Docker предоставляет автоматическое разрешение имен контейнеров в IP-адреса в пределах одной кастомной сети. Это позволяет контейнерам обращаться друг к другу по именам, а не по IP.
  • Гибкая конфигурация: Можно задавать подсети, шлюзы и другие сетевые параметры.

Пример создания и использования:

# 1. Создание кастомной bridge-сети
docker network create my-app-net

# 2. Запуск контейнера с базой данных в этой сети
docker run -d --name db --network my-app-net postgres

# 3. Запуск контейнера приложения, который сможет обратиться к БД по имени 'db'
docker run -d --name app --network my-app-net -e DATABASE_HOST=db my-app-image

В этом примере контейнер app сможет подключиться к postgres по адресу db, так как они находятся в одной кастомной сети my-app-net.

Ответ 18+ 🔞

Да ты послушай, что эти ваши докерные сети вытворяют! Кастомные bridge-сети — это ж как отдельные коммуналки для твоих контейнеров устраивать. Чтобы одни в своей кухне шарились, а другие — в своей, и не лезли, куда не просят.

Зачем это, спросишь? А вот зачем, ёпта:

  • Изоляция, блядь: Это ж святое! Чтоб твой фронтенд не шарился к базе данных от другого проекта, как сосед по парадной в твой холодильник. Каждая сеть — свой закрытый клуб, членский билет по IP не купишь.
  • Встроенный DNS, ядрёна вошь: Это же магия! Ты больше не должен, как последний раб, вписывать айпишники, которые ещё и меняются. Запустил контейнер с именем db — и все в этой сети могут к нему по имени db обращаться. Docker сам всё разрешит, будто у него своя телефонная книжка.
  • Гибкая конфигурация: Хочешь свою подсеть, свой шлюз — хуй с горы, настраивай. Не нравится стандартное — сделай как тебе удобно.

Смотри, как это на практике выглядит, в рот меня чих-пых:

# 1. Создаём свою сеть, типа "моя-сеть-для-приложухи"
docker network create my-app-net

# 2. Запускаем базу данных прямо в этой сети. Сразу в домик!
docker run -d --name db --network my-app-net postgres

# 3. А теперь запускаем само приложение в ЭТУ ЖЕ СЕТЬ.
# И оно спокойно стучится к базе по имени 'db', а не по какому-то левому айпишнику!
docker run -d --name app --network my-app-net -e DATABASE_HOST=db my-app-image

Вот и вся магия, сука. Контейнер app орёт в сеть: «Эй, db, ты где?» — и Docker ему тихонько так подсказывает: «Да вот же он, рядом, общайтесь на здоровье, только не деритесь». Красота же!