6. Docker Networking — Конспект лекции и практика
📚 Общая идея
Docker создаёт изолированные сетевые пространства для контейнеров, позволяя им взаимодействовать друг с другом и с внешним миром через виртуальные интерфейсы, мосты, NAT и DNS.
1️⃣ Компоненты сети в Docker
🌉 Bridge (docker0 — по умолчанию)
- Виртуальный Ethernet-коммутатор на хосте
- Связывает контейнеры в одну общую локальную сеть (172.x.x.x)
- Используется по умолчанию, если не указана другая сеть
🧠 Network Namespace
- Изоляция сетевого стека контейнера (интерфейсы, маршруты и т.д.)
- Каждый контейнер — в отдельном пространстве имён
🔥 iptables
- Docker автоматически создаёт правила NAT и проброса портов
- Проброс портов работает через DNAT на IP контейнера
2️⃣ Проброс портов (Port publishing)
📦 Синтаксис:
--p 8080:80
— порт 8080
хоста направляется на 80
порт контейнера
📡 Что происходит внутри:
🧠 В
docker-compose.yml
:
3️⃣ Взаимодействие контейнеров
🌐 Доступ в Интернет
- Контейнеры используют IP хоста через маскарад (MASQUERADE)
🗣 Межконтейнерное общение:
- В одной сети (bridge или custom):
- по IP
- по имени контейнера (только в user-defined сети!)
- В разных сетях — по умолчанию изоляция
⚙️ Примеры:
docker run --rm -d --name c1 alpine sleep 100
docker run --rm -d --name c2 --network container:c1 alpine sleep 100
4️⃣ Типы сетей в Docker
Тип сети | Описание |
---|---|
none |
Контейнер без сети — для тестов/безопасности |
bridge (по умолчанию) |
Контейнер в приватной сети, NAT + проброс портов |
host |
Контейнер использует сеть хоста — без изоляции |
overlay |
Виртуальная сеть между хостами в Docker Swarm |
macvlan /ipvlan |
Прямой доступ к внешней сети через физический интерфейс |
✍️ Пример создания пользовательской сети:
⚙️ Использование в docker run
:
5️⃣ Практика
🔁 Проверка связи между контейнерами
docker network create my-net
docker run --rm -d --name c1 --network my-net alpine sleep 100
docker run --rm -it --name c2 --network my-net alpine sh
# внутри c2
ping c1
⚡ Использование сети host
🔒 Изоляция через none
📌 Важные команды
docker network ls # Список сетей
docker network inspect <имя_сети> # Информация о сети
docker network connect <сеть> <контейнер> # Подключение контейнера к сети
docker network disconnect <сеть> <контейнер> # Отключение
🧠 Важно помнить
- Контейнеры в одной user-defined bridge сети видят друг друга по именам
- Контейнеры не видят друг друга по именам в default bridge
host
сеть убирает изоляцию — с осторожностью на продеoverlay
иmacvlan
— продвинутая тема, не нужна для базовой практики
🚀 Полезные ссылки
- Docker Docs: Networking
- Play with Docker — онлайн-тренажёр