Gymterview
middle

Какие типы сетей существуют в Docker?

Docker предоставляет несколько сетевых драйверов для организации связи между контейнерами, каждый из которых решает свой сценарий использования.

bridge (по умолчанию)

Изолированная сеть на хосте. Контейнеры в одной bridge-сети могут общаться друг с другом по имени контейнера (DNS-резолвинг):

Пример
# Создать пользовательскую bridge-сеть
docker network create my-network

# Запустить контейнеры в одной сети
docker run -d --name db --network my-network postgres:16
docker run -d --name app --network my-network my-spring-app
# Приложение может подключиться к БД по имени "db"

В стандартной bridge-сети (docker0) DNS по имени контейнера не работает. Используйте пользовательские bridge-сети.

host

Контейнер использует сетевой стек хоста напрямую. Нет изоляции сети, порты контейнера сразу доступны на хосте:

Пример
docker run --network host my-spring-app
# Приложение на порту 8080 сразу доступно на хосте

Используется для максимальной производительности сети. На macOS и Windows работает иначе из-за виртуализации.

none

У контейнера нет сетевого интерфейса (кроме loopback). Полная сетевая изоляция:

Пример
docker run --network none myapp

overlay

Сеть, объединяющая контейнеры на разных Docker-хостах. Используется в Docker Swarm и Kubernetes для кластерных развёртываний.

Полезные команды

Пример
docker network ls                  # Список сетей
docker network inspect my-network  # Информация о сети
docker network connect my-network container  # Подключить контейнер к сети
docker network disconnect my-network container

На собеседовании: назовите четыре типа: bridge, host, none, overlay. Самый важный — bridge (используется по умолчанию). Покажите, что знаете разницу между дефолтной bridge-сетью и пользовательской: в пользовательской работает DNS по имени контейнера, а в дефолтной — нет. Это частая ловушка.