Docker-сеть (docker network) - это способ связать контейнеры между собой и с внешним миром. Благодаря ей приложения в разных контейнерах могут видеть друг друга, обмениваться данными и быть изолированными от посторонних.
Типы сетей:
1) bridge — дефолтная сеть для контейнеров. Работает как приватная подсеть на хосте. Контейнеры внутри могут общаться друг с другом по имени, но не видят контейнеры из других сетей.
2) host — контейнер использует сетевой стек хоста напрямую. Без изоляции, но с меньшими накладными расходами.
3) none — без сети. Полная изоляция.
4) overlay — для связи контейнеров между хостами (в Swarm-кластере).
5) macvlan — контейнеру назначается собственный MAC-адрес. Выглядит как отдельное устройство в сети.
Зачем нужна Docker-сеть:
Можно обращаться между сервисами внутри сети по имени контейнера, без знания IP-адреса. Это работает благодаря встроенному DNS-серверу Docker.
Например, если у тебя есть два сервиса - frontend и api, то внутри одного контейнера ты можешь сделать запрос:
http://api:5000
Docker сам разрешит имя api в IP-адрес другого контейнера в той же сети. Это особенно удобно при использовании docker-compose, где имена сервисов автоматически становятся доступными как DNS-имена.
Создание сети:
Создать сеть можно например командой:
docker network create mynetwork
Также можно указать сеть в одном docker-compose.yml:
services:
api:
image: my-api
networks:
- mynetwork
db:
image: postgres:17
networks:
- mynetwork
networks:
mynetwork:
В этом случае будет создана сеть и туда войдут контейнеры с апи и бд.
Подключение к уже существующей сети:
services:
frontend:
image: myfront
networks:
- mynetwork
networks:
mynetwork:
external: true
"external: true" говорит docker-compose, что сеть уже создана заранее (вручную или другим compose-файлом) и её не нужно пересоздавать.
Добавление и удаление вручную:
docker network connect mynetwork frontend
docker network disconnect mynetwork frontend
Контейнер продолжит работу, просто будет подключён или отключён от указанной сети.
Docker-сети позволяют организовать понятную, безопасную и изолированную инфраструктуру между сервисами. Даже при локальной разработке это помогает избавиться от хаоса с IP-адресами и ручными настройками.
LinuxCamp | #docker #devops #bymaga