Какие типы сетей существуют в 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 по имени контейнера, а в дефолтной — нет. Это частая ловушка.