Ответ
Container Network Model (CNM) — это архитектурная спецификация Docker, которая определяет абстракции для создания и управления виртуальными сетями, к которым подключаются контейнеры. CNM обеспечивает стандартный интерфейс для сетевых драйверов и плагинов.
Основные компоненты CNM:
- Sandbox (Песочница): Изолированное сетевое пространство контейнера (например, Linux network namespace). Содержит конфигурацию сети контейнера (интерфейсы, таблицу маршрутизации).
- Endpoint (Конечная точка): Виртуальный сетевой интерфейс (например,
veth pair), который соединяет Sandbox с Network. - 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) для реализации продвинутых функций: политик безопасности, шифрования трафика.