Какой сетевой режим Docker Compose использует по умолчанию?

Ответ

По умолчанию 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 и легко переносится.
  • Автоматическое подключение: Все сервисы в файле автоматически подключаются к созданной сети.