В чем разница между сетевыми режимами bridge и host в Docker

Ответ

В Docker bridge и host — это два основных сетевых режима, определяющих, как контейнер взаимодействует с сетью хоста и внешним миром.

Bridge (сетевой мост)

Это режим по умолчанию. Docker создает виртуальную изолированную сеть на хост-машине, и каждый контейнер в этой сети получает свой внутренний IP-адрес.

  • Изоляция: Контейнеры изолированы от сетевого стека хоста.
  • Доступ: Для доступа к сервису внутри контейнера извне требуется явный проброс портов (port mapping) с хоста на контейнер.
  • Безопасность: Считается более безопасным из-за изоляции.

Пример:

# Запустить контейнер Nginx и пробросить порт 8080 хоста на порт 80 контейнера
docker run -d -p 8080:80 nginx

Host (сеть хоста)

В этом режиме контейнер разделяет сетевое пространство с хост-машиной, отключая сетевую изоляцию.

  • Изоляция: Отсутствует. Контейнер использует IP-адрес и сетевые интерфейсы хоста напрямую.
  • Доступ: Проброс портов не нужен. Если сервис в контейнере слушает порт 80, он будет доступен на порту 80 хоста.
  • Производительность: Максимальная, так как отсутствует трансляция сетевых адресов (NAT), что снижает задержки.
  • Риски: Возможны конфликты портов, если несколько контейнеров или сервисов на хосте пытаются использовать один и тот же порт.

Пример:

# Запустить контейнер Nginx, который будет слушать порт 80 напрямую на хосте
docker run -d --network=host nginx

Когда что использовать:

  • bridge: Стандартный выбор для большинства приложений, где важна сетевая изоляция и безопасность.
  • host: Для приложений, где критична максимальная сетевая производительность и минимальные задержки (например, сетевые сервисы, балансировщики нагрузки), и где можно пожертвовать изоляцией.