Ответ
По умолчанию Docker Compose создает для каждого проекта отдельную user-defined bridge network (пользовательскую мостовую сеть).
Почему именно bridge-сеть? Этот режим обеспечивает изоляцию сервисов проекта от других контейнеров на хосте, а также позволяет сервисам внутри проекта легко взаимодействовать друг с другом по их именам (DNS-резолвинг), без необходимости знать IP-адреса. Это значительно упрощает конфигурацию и масштабирование.
Пример конфигурации docker-compose.yml:
version: '3.8' # Рекомендуется использовать актуальную версию
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- my_project_network # Явное указание сети (опционально, если сеть одна)
db:
image: postgres:13
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_project_network
networks:
my_project_network:
driver: bridge # Явное определение сети, если нужно настроить ее параметры
Как это работает:
- Если сеть не указана явно, Docker Compose автоматически создает сеть с именем
<project_name>_default(где<project_name>— имя каталога, в котором находитсяdocker-compose.yml). - Все сервисы, определенные в файле, автоматически подключаются к этой сети.
- Сервисы могут обращаться друг к другу по их именам, указанным в
services(например,webможет подключиться кdbпо имени хостаdb).
Основные преимущества user-defined bridge-сетей в Docker Compose:
- Изоляция: Сервисы проекта изолированы от других контейнеров на хосте.
- DNS-резолвинг: Сервисы могут находить друг друга по именам, что упрощает конфигурацию.
- Портативность: Конфигурация сети описывается в
docker-compose.ymlи легко переносится. - Автоматическое подключение: Все сервисы в файле автоматически подключаются к созданной сети.