Что такое Container Network Model (CNM) в Docker?

«Что такое Container Network Model (CNM) в Docker?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Container Network Model (CNM) — это архитектурная спецификация Docker, которая определяет абстракции для создания и управления виртуальными сетями, к которым подключаются контейнеры. CNM обеспечивает стандартный интерфейс для сетевых драйверов и плагинов.

Основные компоненты CNM:

  1. Sandbox (Песочница): Изолированное сетевое пространство контейнера (например, Linux network namespace). Содержит конфигурацию сети контейнера (интерфейсы, таблицу маршрутизации).
  2. Endpoint (Конечная точка): Виртуальный сетевой интерфейс (например, veth pair), который соединяет Sandbox с Network.
  3. Network (Сеть): Виртуальная коммутируемая группа, к которой могут подключаться несколько Endpoint'ов (аналогично VLAN). Реализуется через драйверы (bridge, overlay).

Практическое использование через Docker CLI:

# Создание bridge-сети
$ docker network create --driver bridge --subnet 172.20.0.0/16 my_app_net

# Запуск контейнера в этой сети
$ docker run -d --name web --network my_app_net nginx:alpine

# Подключение работающего контейнера к другой сети
$ docker network connect my_app_net existing_container

Типы драйверов:

  • bridge: Сеть по умолчанию для одного хоста Docker.
  • overlay: Для соединения контейнеров на нескольких Docker-хостах (Swarm/Kubernetes).
  • host: Убирает изоляцию сети, контейнер использует сетевой стек хоста.
  • macvlan: Назначает контейнеру собственный MAC-адрес, делая его видимым в физической сети.
  • none: Полное отключение сети для контейнера.

CNM позволяет использовать сторонние сетевые плагины (например, Calico, Weave Net) для реализации продвинутых функций: политик безопасности, шифрования трафика.