Ответ
В Docker есть несколько драйверов сетей, каждый решает свою задачу. В DevOps-контексте важно понимать их для изоляции, безопасности и связи сервисов.
Основные типы сетей и их применение:
-
bridge(по умолчанию): Изолированная внутренняя сеть на хосте. Контейнеры получают IP из подсети моста и могут общаться друг с другом. Для доступа извне порты пробрасываются флагом-p. Пользовательские мосты (docker network create) позволяют лучше организовать сервисы и предоставляют встроний DNS по имени контейнера.# Создание изолированной сети для группы сервисов docker network create --driver bridge --subnet 172.20.0.0/16 backend-net docker run -d --name app --network backend-net my-app:latest docker run -d --name db --network backend-net postgres:15 # Контейнер 'app' может подключиться к 'db' по имени хоста 'db' -
host: Контейнер использует сетевой стек хоста напрямую. Нет изоляции, но максимальная производительность. Используется для высоконагруженных сетевых задач (например, прокси-серверы). -
none: У контейнера нет сетевых интерфейсов. Полезно для изолированных задач, например, batch-обработки данных, не требующих сети. -
overlay: Ключевая сеть для Docker Swarm. Позволяет контейнерам на разных физических хостах общаться в единой виртуальной сети. Аналоги реализуются CNI-плагинами в Kubernetes (Calico, Flannel, Cilium). -
macvlan: Назначает контейнеру реальный MAC-адрес, делая его видимым в физической сети как отдельное устройство. Используется для легаси-приложений, которым нужен выделенный IP в корпоративной сети.
В реальных проектах я чаще всего работаю с пользовательскими bridge-сетями для композов Docker и overlay-подобными сетями в Kubernetes, где управление сетевой политикой (NetworkPolicy) становится критически важным для безопасности.