Сети в Compose

Примечание: Этот документ применим только если вы используете верисю 2 формата Compose файла.Сетевые функции не поддерживаются для версии 1 (устаревшее).

По умолчанию Compose создает одну сеть для вашего приложения. Каждый контейнер подключается к этой сети и доступен для других контейнеров из этой сети в том числе по имени узла идентичному имени контейнера.

Примечание: Название сети вашего приложения дается из названия проекта, которое в свою очередь берется из названия директории в которой расположен проект. Вы можете изменить название проекта с помощью флага --project-name или переменной окружения COMPOSE_PROJECT_NAME.

Например, предположим ваше приложение находится в директории myapp и ваш файл docker-compose.yml выглядит так:

version: '2'

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

Когда вы запускаете docker-compose up, то происходит следующее:

  1. Создается сеть с названием myapp_default.
  2. Создается контейнер на основе конфигурации web и подключается к сети myapp_default под именем web.
  3. Создается контейнер на основе конфигурации db и подключается к сети myapp_default под именем db.

Каждый контейнер теперь может обнаружить хост по имени web или db и получить IP адрес соответствующего контейнера. К примеру, код приложения из контейнера web может подключиться к URL postgres://db:5432 и использовать базу данных Postgres.

Поскольку для сервиса web в конфигурации задан порт, он также доступен из внешней сети через порт 8000 сетевого интерфейса вашего Docker хоста.

Обновление контейнеров

Если вы сделаете изменение конфигурации сервиса и выполните docker-compose up что бы обновить его, то старый контейнер будет удален и новый контейнер будет подключен к сети под другим IP адресом, но с тем же именем. Работающие контейнеры смогут найти это имя и подключиться к новому адресу, но старый адрес перестанет работать.

Если какие-либо контейнеры имеют соединения, открытые для старого контейнера, они будут закрыты. Обязанностью контейнера является обнаружение данной ситуации, поиск имени и повторное подключение.

Ссылки позволяют определять дополнительные псевдонимы по которым сервис может быть доступен из другого сервиса. Нет необходимости использовать ссылки для коммуникации сервисов - по умолчанию, любой сервис доступен из другого сервиса по имени. В этом примере, db доступен из web по именам хостов db и database:

version: '2'
services:
  web:
    build: .
    links:
      - "db:database"
  db:
    image: postgres

Больше информации вы найдете в руководстве по ссылкам.

Многоузловые сети

При развертывании Compose приложения в Swarm кластере, вы можете использовать overlay драйвер что бы задействовать мульти-хост взаимодействие между контейнерами не внося изменений в Compose файл или код приложения.

Ознакомьтесь введением в мульти-хост сети что бы узнать как настроить Swarm кластер. Кластер будет использовать overlay драйвер по умолчанию, но вы можете указать его явно, если хотите - ниже описано, как это сделать.

Определение настраиваемых сетей

Вместо того что бы использовать сеть по умолчанию, вы можете указать свои собственные сети с помощью ключевого слова networks. Это позволит вам создать более сложные топологии и указывать пользовательские сетевые драйверы и параметры. Вы так же можете использовать их для подключения сервисов к внешним сетям которые не управляются Compose.

Для каждого сервиса можно указать к каким сетям подключиться с помощью ключевого слова networks после которого нужно перечислить список необходимых сетей.

Ниже представлен пример Compose файла с двумя заданными сетями. Сервис proxy изолирован от сервиса db, по тому что у них нет общей сети, только сервис app может обращаться к ним обоим.

version: '2'

services:
  proxy:
    build: ./proxy
    networks:
      - front
  app:
    build: ./app
    networks:
      - front
      - back
  db:
    image: postgres
    networks:
      - back

networks:
  front:
    # Use a custom driver
    driver: custom-driver-1
  back:
    # Use a custom driver which takes special options
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"

Сети можно настроить со статическими IP-адресами задав ipv4_address и/или ipv6_address для каждой сети.

Полную информацию по настройке сетей и доступным опциям вы можете найти в следующих разделах:

Настройка сети по умолчанию

Вместо (или вместе) указания вашей собственной сети, вы также можете изменить настройки сети по умолчанию указав под networks ключ default:

version: '2'

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

networks:
  default:
    # Use a custom driver
    driver: custom-driver-1

Использование уже существующей сети

Если вы хотите подключить ваши контейнеры к уже существующей сети, используйте опцию external:

networks:
  default:
    external:
      name: my-pre-existing-network

Вместо того что бы пытаться создать сеть под названием [projectname]_default, Compose будет искать сеть с именем my-pre-existing-network и подключит контейнеры вашего приложения к ней.

Перевод абзаца

Оригинал:


Комментарии:

Комментариев нет, желаете стать первым?

Пожалуйста, авторизуйтесь что бы оставлять комментарии.