Примечание: Этот документ применим только если вы используете верисю 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
, то происходит следующее:
myapp_default
.web
и подключается к сети myapp_default
под именем web
.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
и подключит контейнеры вашего приложения к ней.
Комментарии:
Пожалуйста, авторизуйтесь что бы оставлять комментарии.