Docker изолирует контейнеры не только по процессам и файловой системе, но и по сети. От этого зависит, смогут ли контейнеры общаться между собой, будут ли они доступны извне и насколько безопасно это взаимодействие.
Основные типы сетей
• Bridge — сеть по умолчанию.
Контейнеры получают внутренний IP и могут общаться друг с другом. Для связки нескольких сервисов в одной среде лучше создавать свои пользовательские сети (docker network create). Тогда контейнеры будут доступны по имени, например ping db.
• Host — общая сеть с хостом.
Контейнер не имеет отдельного IP: он использует сетевой стек машины. Это снижает изоляцию, но убирает накладные расходы на маршрутизацию. Подходит для сервисов, где важна скорость.
• None — полная изоляция.
Контейнер запускается без сети. Применяется редко, в основном для задач, где сеть не нужна (утилиты, тесты).
• Overlay — сеть для кластера.
Объединяет несколько Docker-хостов. Используется в Swarm и Kubernetes. Контейнеры на разных серверах работают так, будто они рядом.
• Macvlan — контейнер как полноценный участник LAN.
Контейнер получает MAC-адрес и «выглядит» в локальной сети как отдельное устройство. Это удобно, если требуется доступ из реальной сети напрямую, например для IoT или legacy-приложений.
Полезные команды
Список сетей:
docker network ls
Подробная информация о сети:
docker network inspect bridge
Создать сеть:
docker network create mynet
Удалить сеть:
docker network rm mynet
Подключить контейнер к сети:
docker network connect mynet app1
Отключить контейнер от сети:
docker network disconnect mynet app1