Сети Docker и драйвер bridge
Как контейнеры объединяются в сети и зачем создавать собственную сеть вместо стандартной.
Сеть Docker — виртуальная сеть, в которой контейнеры могут обмениваться трафиком; драйвер
bridge— стандартный для одного хоста.
Зачем контейнерам сеть
Приложениям нужно общаться: бэкенд ходит в базу, веб-сервер — в бэкенд. Docker предоставляет для этого виртуальные сети. По умолчанию все контейнеры подключены к встроенной сети bridge, но у неё есть важное ограничение.
Управление сетями
# Список сетей
docker network ls
Вывод:
NETWORK ID NAME DRIVER SCOPE 9f1a2b3c4d5e bridge bridge local 0a1b2c3d4e5f host host local 1b2c3d4e5f6a none null local
Драйвер bridge — самый частый: он создаёт изолированную сеть на одном хосте. Есть и другие (host, none), но для связи контейнеров нужен именно bridge.
Почему создают свою сеть
Ключевой момент: в пользовательской bridge-сети контейнеры видят друг друга по имени (работает встроенный DNS). В стандартной сети bridge такого нет — там пришлось бы использовать IP-адреса, которые меняются. Поэтому для связки контейнеров всегда создают отдельную сеть.
# Создать пользовательскую сеть
docker network create my-net
# Подробности о сети
docker network inspect my-net
Подключение контейнера к сети
Контейнер подключают к сети флагом --network при запуске:
docker run -d --name db --network my-net \
-e POSTGRES_PASSWORD=secret postgres:16
docker run -d --name api --network my-net \
-p 8000:8000 my-app:1.0
Оба контейнера в сети my-net и теперь могут общаться. Уже работающий контейнер можно подключить к сети командой docker network connect my-net ИМЯ.
| Команда | Что делает |
docker network ls | список сетей |
docker network create ИМЯ | создать пользовательскую сеть |
--network ИМЯ | подключить контейнер при запуске |
docker network connect ИМЯ КОНТ | подключить работающий контейнер |
Итог
- Контейнеры общаются через виртуальные сети Docker; стандартный драйвер —
bridge. - В пользовательской bridge-сети работает DNS по имени контейнера, в дефолтной — нет.
- Сеть создают через
docker network create, подключают флагом--network.