
Данная базовая спецификация по Docker Compose представляет из себя материал для бустрого освоения или освежения памяти по данному инструменту.
Данный вводный курс преследует 2 цели:
- быстро освоить базовые концепции
- быстро пройтись и вспомнить основные понятия и возможности, не тратя время на ненужные моменты
поэтому, самый момент сохранить ссылку на данный пост в закладках. Для быстрой навигации можете пользоваться удобной навигацией по тексту
[search-in-place-form in_current_page=»1″]
Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. С Compose вы используете файл YAML для настройки служб вашего приложения. Затем с помощью одной команды вы создаете и запускаете все службы из вашей конфигурации.
Compose работает на всех этапах: производстве, подготовке, разработке, тестировании, а также рабочих процессах непрерывной интеграции.
Использование Compose в основном состоит из трех шагов:
- Определение среды своего приложения с помощью ,
Dockerfile
чтобы его можно было воспроизвести где угодно. - Определение службы, из которых состоит ваше приложение,
docker-compose.yml
чтобы их можно было запускать вместе в изолированной среде. - Запустите
docker compose up
, и команда Docker compose запустит и запустит все ваше приложение.
Формат файла docker-compose.yml
выглядит так:
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Дополнительные сведения о файле Compose см. в справочнике по файлу Compose .
В Compose есть команды для управления всем жизненным циклом вашего приложения:
- Запускать, останавливать и перестраивать службы
- Просмотр состояния запущенных служб
- Потоковая передача журнала запущенных служб
- Выполнение одноразовой команды для службы
Спецификация команд утилиты Docker Compose
В данной статье рассмотрим спецификацию версии 3 и выше.
build
Данное свойство сборки определяет параметры конфигурации, которые применяются реализациями Compose для сборки образа Docker из исходного кода. build можно указать либо в виде строки, содержащей путь к контексту сборки, либо в виде подробной структуры:
services:
webapp:
build: ./strapi
context | определяет либо путь к каталогу, содержащему Dockerfile, либо URL-адрес репозитория git. |
dockerfile | позволяет установить альтернативный Dockerfile. Относительный путь ДОЛЖЕН быть разрешен из контекста сборки. Реализации Compose ДОЛЖНЫ предупреждать пользователя об абсолютном пути, используемом для определения Dockerfile, поскольку они не позволяют файлу Compose быть переносимым. |
args | args определить аргументы сборки, т.е. значения Dockerfile ARG . |
ssh | ssh определяет аутентификацию SSH, которую сборщик образов ДОЛЖЕН использовать во время сборки образа (например, клонирование частного репозитория) |
cache_from | cache_from определяет список источников, которые сборщик изображений ДОЛЖЕН использовать для разрешения кэша. |
cache_to | cache_to определяет список мест экспорта, которые будут использоваться для совместного использования кэша сборки с будущими сборками. |
extra_hosts | extra_hosts добавляет сопоставления имен хостов во время сборки. Используйте тот же синтаксис, что и extra_hosts . |
isolation | isolation определяет технологию изоляции контейнера сборки. Поддерживаемые значения, подобные изоляции , зависят от платформы. |
labels | labels добавить метаданные к полученному изображению. labels может быть задан как массив или карта. |
shm_size | shm_size установливает размер общей памяти (/dev/shm раздела в Linux), выделенной для сборки образа Docker. Задайте как целочисленное значение, представляющее количество байтов, или как строку, выражающую значение байта . |
target | target определяет этап для сборки, как определено внутри многоэтапного Dockerfile . |
blkio_config
blkio_config
определяет набор параметров конфигурации для установки ограничений блока ввода-вывода для этой службы.
services :
foo :
image : busybox
blkio_config :
вес : 300
weight_device :
- путь : /dev/sda
вес : 400
device_read_bps :
- путь : /dev/sdb
скорость : ' 12mb '
device_read_iops : -путь
: / dev/sdb скорость : 120 device_write_bps :
- путь :
Скорость /dev/sdb : ' 1024k '
device_write_iops : -путь
: скорость / dev/sdb : 30
device_read_bps, device_write_bps | Установите лимит операций в секунду для операций чтения/записи на данном устройстве. |
device_read_iops, device_write_iops | Измените пропорцию пропускной способности, выделенной для этой службы, по сравнению с другими службами. Принимает целочисленное значение от 10 до 1000, по умолчанию — 500. |
weight | Изменить пропорцию пропускной способности, выделенной для этой службы, по сравнению с другими службами. |
weight_device | Точная настройка распределения полосы пропускания по устройствам. |
cpu_count
cpu_count
определяет количество используемых ЦП для сервисного контейнера.
cpu_percent
cpu_percent
определяет используемый процент доступных процессоров.
cpu_shares
cpu_shares
определяет (в виде целочисленного значения) относительный вес процессора сервисного контейнера по сравнению с другими контейнерами.
cpu_period
cpu_period
разрешить реализациям Compose настраивать период CPU CFS (Completely Fair Scheduler), когда платформа основана на ядре Linux.
cpu_quota
cpu_quota
разрешить реализациям Compose настраивать квоту CPU CFS (Completely Fair Scheduler), когда платформа основана на ядре Linux.
cpu_rt_runtime
cpu_rt_runtime
настраивает параметры распределения ЦП для платформы с поддержкой планировщика реального времени. Может быть либо целым числом, использующим микросекунды в качестве единиц измерения, либо длительностью.
cpu_rt_period: '1400us'
cpu_rt_period: 11000`
cpuset
cpuset
явно определяет ЦП, в которых разрешено выполнение. Может быть диапазоном 0-3
или списком0,1
cap_add
cap_add
указывает дополнительные возможности контейнера в виде строк.
cap_add:
- ALL
cap_drop
cap_drop
указывает возможности контейнера для удаления в виде строк.
cap_drop:
- NET_ADMIN
- SYS_ADMIN
cgroup_parent
cgroup_parent
указывает НЕОБЯЗАТЕЛЬНУЮ родительскую контрольную группу для контейнера.
cgroup_parent: m-executor-abcd
command
command
переопределяет команду по умолчанию, объявленную образом контейнера (т.е. файлом Dockerfile CMD
).
command: bundle exec thin -p 3000
Команда также может быть списком, аналогично Dockerfile :
command: [ "bundle", "exec", "thin", "-p", "3000" ]
configs
configs
предоставить доступ к конфигурациям для каждой службы с использованием configs
конфигурации для каждой службы. Поддерживаются два различных варианта синтаксиса.
container_name
container_name
— это строка, указывающая имя пользовательского контейнера, а не сгенерированное имя по умолчанию.
container_name: my-web-container
credential_spec
credential_spec
настраивает спецификацию учетных данных для управляемой учетной записи службы.
depends_on
depends_on
выражает зависимости запуска и завершения работы между службами.
deploy
deploy
определяет конфигурацию для развертывания и жизненного цикла сервисов, как определено здесь.
device_cgroup_rules
device_cgroup_rules
определяет список правил контрольной группы устройств для этого контейнера. Это тот же формат, который ядро Linux указывает в контроллере белого списка устройств Control Groups.
device_cgroup_rules:
- 'c 1:3 mr'
- 'a 7:* rmw'
devices
devices
определяет список сопоставлений устройств для созданных контейнеров в виде HOST_PATH:CONTAINER_PATH[:CGROUP_PERMISSIONS]
.
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
- "/dev/sda:/dev/xvda:rwm"
dns
dns
определяет настраиваемые DNS-серверы для установки в конфигурации сетевого интерфейса контейнера. Может быть одним значением или списком.
DNS : 8.8.8.8
DNS :
- 8.8.8.8
- 9.9.9.9
dns_opt
dns_opt
перечислить настраиваемые параметры DNS, которые будут переданы преобразователю DNS контейнера ( /etc/resolv.conf
файл в Linux).
dns_opt :
- use-vc
- без запроса tld
dns_search
dns
определяет настраиваемые домены поиска DNS для установки в конфигурации сетевого интерфейса контейнера. Может быть одним значением или списком.
dns_search : example.com
dns_search :
- dc1.example.com
- dc2.example.com
domainname
domainname
объявляет собственное доменное имя для контейнера службы. ДОЛЖНО быть действительным именем хоста RFC 1123.
entrypoint
entrypoint
переопределяет точку входа по умолчанию для образа Docker (т . е ENTRYPOINT
. заданную Dockerfile). Реализации Compose ДОЛЖНЫ удалять любую команду по умолчанию в образе Docker — обе команды ENTRYPOINT
и CMD
инструкции в файле Docker — когда они entrypoint
настроены файлом Compose. Если command
также установлен, он используется как параметр для entrypoint
замены образа Docker.CMD
entrypoint: /code/entrypoint.sh
Точка входа также может быть списком, аналогично Dockerfile :
entrypoint:
- php
- -d
- zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
- -d
- memory_limit=-1
- vendor/bin/phpunit
env_file
env_file
добавляет переменные среды в контейнер на основе содержимого файла.
env_file : .env
Рассмотрим пример
PSQL_USER=user
PSQL_DB=dbname
PSQL_PASSWORD=secret
PSQL_PORT=5432
version: '3.1'
services:
postgres:
image: postgres:12
environment:
POSTGRES_PASSWORD: ${PSQL_PASSWORD:-secret1}
POSTGRES_USER: ${PSQL_USER}
POSTGRES_DB: ${PSQL_DB}
ports:
- ${PSQL_PORT:-5432}:5432
Тут следует добавить, что если в .env файле не найден параметр или он пустой, то есть возможность задать параметр по умолчанию при задании параметра, к примеру с трочке, где задает пароль POSTGRES_PASSWORD: ${PSQL_PASSWORD:-secret1}
мы можем по умолчанию использовать значение secret1
.
env_file
также может быть списком. Файлы в списке ДОЛЖНЫ обрабатываться сверху вниз. Для одной и той же переменной, указанной в двух файлах env, ДОЛЖНО стоять значение из последнего файла в списке.
env_file :
- ./a.env
- ./b.env
environment
environment
определяет переменные среды, установленные в контейнере. environment
может использовать либо массив, либо карту. Любые логические значения; true, false, yes, no, СЛЕДУЕТ заключать в кавычки, чтобы парсер YAML не преобразовывал их в True или False.
Переменные среды МОГУТ быть объявлены одним ключом (без знака равенства). В таком случае реализации Compose ДОЛЖНЫ полагаться на некоторое взаимодействие с пользователем для разрешения значения. В противном случае переменная не устанавливается и будет удалена из среды контейнера службы.
Синтаксис карты:
environment:
RACK_ENV: development
SHOW: "true"
USER_INPUT:
Синтаксис массива:
environment:
- RACK_ENV=development
- SHOW=true
- USER_INPUT
Когда оба параметра env_file
и environment
установлены для службы, значения, заданные параметром , environment
имеют приоритет.
expose
expose
определяет порты, которые реализации Compose ДОЛЖНЫ предоставлять из контейнера. Эти порты ДОЛЖНЫ быть доступны для связанных служб и НЕ ДОЛЖНЫ публиковаться на хост-компьютере. Можно указать только внутренние порты контейнера.
expose:
- "3000"
- "8000"
extends
Расширить другой сервис в текущем файле или другом, при необходимости переопределяя конфигурацию. Вы можете использовать extends
на любом сервисе вместе с другими ключами конфигурации. Значение extends
ДОЛЖНО быть отображением, определенным с обязательным service
и необязательным file
ключом.
extends:
file: common.yml
service: webapp
external_links
external_links
связать контейнеры служб со службами, управляемыми вне этого приложения Compose. external_links
определить имя существующей службы для извлечения с помощью механизма поиска платформы. SERVICE:ALIAS
Можно указать псевдоним формы.
external_links :
- Redis
- база данных: mysql
- база данных: postgresql
extra_hosts
extra_hosts
добавляет сопоставления имен хостов в конфигурацию сетевого интерфейса контейнера ( /etc/hosts
для Linux). Значения ДОЛЖНЫ устанавливать имя хоста и IP-адрес для дополнительных хостов в форме HOSTNAME:IP
.
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
group_add
group_add
указывает дополнительные группы (по имени или номеру), членом которых ДОЛЖЕН быть пользователь внутри контейнера.
Примером того, где это полезно, является ситуация, когда несколько контейнеров (работающих от имени разных пользователей) должны читать или записывать один и тот же файл на общий том. Этот файл может принадлежать группе, совместно используемой всеми контейнерами, и указан в group_add
.
services:
myservice:
image: alpine
group_add:
- mail
healthcheck
healthcheck
объявляет проверку, которая выполняется, чтобы определить, являются ли контейнеры для этой службы «исправными». Это переопределяет инструкцию HEALTHCHECK Dockerfile, заданную образом Docker службы.
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
interval
, timeout
и start_period
указаны как продолжительность.
hostname
hostname
объявляет пользовательское имя хоста для контейнера службы. ДОЛЖНО быть действительным именем хоста RFC 1123.
image
image
указывает образ, с которого будет запускаться контейнер. Изображение ДОЛЖНО соответствовать формату адресуемого изображения Open Container Specification , например [<registry>/][<project>/]<image>[:<tag>|@<digest>]
.
image: redis
image: redis:5
image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis
Если образ не существует на платформе, реализации Compose ДОЛЖНЫ попытаться извлечь его на основе файла pull_policy
. Реализации Compose с поддержкой сборки МОГУТ предлагать конечным пользователям альтернативные варианты управления приоритетом извлечения по сравнению со сборкой образа из исходного кода, однако извлечение образа ДОЛЖНО быть поведением по умолчанию.
image
МОЖЕТ быть опущен в файле Compose, если build
секция объявлена. Реализации Compose без поддержки сборки ДОЛЖНЫ завершаться ошибкой, если image
отсутствует в файле Compose.
init
init
запустить процесс инициализации (PID 1) внутри контейнера, который пересылает сигналы и собирает процессы. Установите этот параметр, true
чтобы включить эту функцию для службы.
services:
web:
image: alpine:latest
init: true
Используемый двоичный файл инициализации зависит от платформы.
ipc
ipc
настраивает режим изоляции IPC, установленный сервисным контейнером. Доступные значения зависят от платформы, но спецификация Compose определяет конкретные значения, которые ДОЛЖНЫ быть реализованы, как описано, если они поддерживаются:
shareable
что дает контейнеру собственное личное пространство имен IPC с возможностью совместного использования его с другими контейнерами.service:{name}
что заставляет контейнер присоединитьсяshareable
к пространству имен IPC другого контейнера.
ipc: "shareable"
ipc: "service:[service name]"
isolation
isolation
определяет технологию изоляции контейнера. Поддерживаемые значения зависят от платформы.
labels
labels
добавить метаданные в контейнеры. Вы можете использовать либо массив, либо карту.
Рекомендуется использовать обратную DNS-нотацию, чтобы ваши метки не конфликтовали с метками, используемыми другим программным обеспечением.
labels:
com.example.description: "Accounting webapp"
com.example.department: "Finance"
com.example.label-with-empty-value: ""
labels:
- "com.example.description=Accounting webapp"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
Реализации Compose ДОЛЖНЫ создавать контейнеры с каноническими метками:
com.docker.compose.project
установите для всех ресурсов, созданных реализацией Compose, имя пользовательского проектаcom.docker.compose.service
установить в контейнерах службы с именем службы, как определено в файле Compose
Префикс com.docker.compose
метки зарезервирован. Указание меток с этим префиксом в файле Compose ДОЛЖНО приводить к ошибке выполнения.
links
links
определяет сетевую ссылку на контейнеры в другом сервисе. Либо укажите имя службы и псевдоним ссылки ( SERVICE:ALIAS
), либо просто имя службы.
web:
links:
- db
- db:database
- redis
logging
logging
определяет конфигурацию ведения журнала для службы.
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
Имя driver
указывает драйвер ведения журнала для контейнеров службы. Значения по умолчанию и доступные значения зависят от платформы. Специальные параметры драйвера можно задать с помощью options
пар ключ-значение.
network_mode
network_mode
установить сетевой режим сервисных контейнеров. Доступные значения зависят от платформы, но спецификация Compose определяет конкретные значения, которые ДОЛЖНЫ быть реализованы, как описано, если они поддерживаются:
none
которые отключают все контейнерные сетиhost
который дает контейнеру необработанный доступ к сетевому интерфейсу хостаservice:{name}
который дает контейнерам доступ только к указанной службе
networks
networks
определяет сети, к которым подключены сервисные контейнеры, ссылаясь на записи под ключом верхнего уровняnetworks
.
aliases | aliases объявляет альтернативные имена хостов для этой службы в сети. Другие контейнеры в той же сети могут использовать либо имя службы, либо этот псевдоним для подключения к одному из контейнеров службы. |
ipv4_address, ipv6_address | Укажите статический IP-адрес для контейнеров для этой службы при подключении к сети. |
link_local_ips | link_local_ips указывает список локальных IP-адресов. Link-local IP-адреса — это специальные IP-адреса, которые принадлежат хорошо известной подсети и полностью управляются оператором, обычно в зависимости от архитектуры, в которой они развернуты. Реализация зависит от платформы. |
priority | priority указывает, в каком порядке реализации Compose СЛЕДУЕТ подключать контейнеры службы к своим сетям. Если не указано, значение по умолчанию равно 0. |
mac_address
mac_address
устанавливает MAC-адрес для сервисного контейнера.
mem_swappiness
mem_swappiness
определяет в процентах (значение от 0 до 100) ядро хоста для замены анонимных страниц памяти, используемых контейнером.
- значение 0 отключает анонимный обмен страницами.
- значение 100 делает все анонимные страницы заменяемыми.
Значение по умолчанию зависит от платформы.
memswap_limit
memswap_limit
определяет объем контейнера памяти, который разрешено выгружать на диск. Это атрибут-модификатор, который имеет значение только в том случае, если memory
он также установлен. Использование подкачки позволяет контейнеру записывать избыточные требования к памяти на диск, когда контейнер исчерпал всю доступную ему память. Существует потеря производительности для приложений, которые часто подкачивают память на диск.
oom_kill_disable
Если oom_kill_disable
установлено, реализация Compose ДОЛЖНА настроить платформу, чтобы она не убивала контейнер в случае нехватки памяти.
oom_score_adj
oom_score_adj
настраивает предпочтение уничтожения контейнеров платформой в случае нехватки памяти. Значение ДОЛЖНО находиться в диапазоне [-1000,1000].
pid
pid
устанавливает режим PID для контейнера, созданного реализацией Compose. Поддерживаемые значения зависят от платформы.
platform
platform
определяет контейнеры целевой платформы для этой службы, используя os[/arch[/variant]]
синтаксис. Реализация Compose ДОЛЖНА использовать этот атрибут при объявлении, чтобы определить, какая версия образа будет извлечена и/или на какой платформе будет выполняться сборка службы.
platform: osx
platform: windows/amd64
platform: linux/arm64/v8
ports
Открывает контейнерные порты. Сопоставление портов НЕ ДОЛЖНО использоваться network_mode: host
, и это ДОЛЖНО приводить к ошибке времени выполнения.
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
target | контейнерный порт |
published | общедоступный порт, может быть установлен как диапазон с использованием синтаксиса start-end , тогда фактический порт ДОЛЖЕН быть назначен в пределах этого диапазона на основе доступных портов. |
host_ip | отображение IP-адреса хоста, не указанное означает все сетевые интерфейсы (0.0.0.0 ) |
protocol | протокол порта (tcp или udp ), не указан означает любой протокол |
mode | host для публикации хост-порта на каждом узле или ingress для балансировки нагрузки порта. |
Синтаксис длинной формы позволяет настраивать дополнительные поля, которые не могут быть выражены в краткой форме.
ports:
- target: 80
host_ip: 127.0.0.1
published: 8080
protocol: tcp
mode: host
- target: 80
host_ip: 127.0.0.1
published: 8000-9000
protocol: tcp
mode: host
privileged
privileged
настраивает контейнер службы для запуска с повышенными привилегиями. Поддержка и фактические последствия зависят от платформы.
profiles
profiles
определяет список именованных профилей для включения службы. Если не установлено, служба всегда включена. Если он присутствует, profiles
СЛЕДУЕТ следовать формату регулярного выражения [a-zA-Z0-9][a-zA-Z0-9_.-]+
.
pull_policy
pull_policy
определяет решения, которые будут принимать реализации Compose, когда он начнет извлекать изображения. Возможные значения:
always | реализациям Compose СЛЕДУЕТ всегда извлекать образ из реестра. |
never | реализации Compose НЕ ДОЛЖНЫ извлекать образ из реестра и ДОЛЖНЫ полагаться на кешированный образ платформы. Если нет кэшированного изображения, НЕОБХОДИМО сообщить об ошибке. |
missing | реализациям Compose СЛЕДУЕТ извлекать образ, только если он недоступен в кэше платформы. Это СЛЕДУЕТ использовать по умолчанию для реализации Compose без поддержки сборки. if_not_present ДОЛЖЕН рассматриваться как псевдоним для этого значения для обратной совместимости. |
build | реализациям Compose СЛЕДУЕТ создавать образ. Реализации Compose СЛЕДУЕТ перестраивать образ, если он уже существует. |
Если pull_policy
и build
оба представлены, реализации Compose ДОЛЖНЫ создавать образ по умолчанию. Реализации Compose МОГУТ переопределить это поведение в цепочке инструментов.
read_only
read_only
настраивает создание сервисного контейнера с файловой системой, доступной только для чтения.
restart
restart
определяет политику, которую платформа будет применять при закрытии контейнера.
no | политика перезапуска по умолчанию. Ни при каких обстоятельствах не перезапускает контейнер. |
always | политика всегда перезапускает контейнер до его удаления. |
on-failure | политика перезапускает контейнер, если код выхода указывает на ошибку. |
unless-stopped | политика перезапускает контейнер независимо от кода выхода, но прекращает перезапуск при остановке или удалении службы. |
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
runtime
runtime
указывает, какую среду выполнения использовать для контейнеров службы.
Значение runtime
зависит от реализации. Например, runtime
это может быть имя реализации спецификации среды выполнения OCI , например «runc».
web:
image: busybox:latest
command: true
runtime: runc
secrets
secrets
предоставляет доступ к конфиденциальным данным, определенным секретами , для каждой службы. Поддерживаются два различных варианта синтаксиса: короткий синтаксис и длинный синтаксис.
Реализации Compose ДОЛЖНЫ сообщать об ошибке, если секрет не существует на платформе или не определен в secrets
разделе этого файла Compose.
security_opt
security_opt
переопределяет схему маркировки по умолчанию для каждого контейнера.
security_opt:
- label:user:USER
- label:role:ROLE
shm_size
shm_size
настраивает размер общей памяти ( /dev/shm
раздела в Linux), разрешенный сервисным контейнером. Задается как значение байта .
stdin_open
stdin_open
настраивает сервисные контейнеры для запуска с выделенным стандартным вводом.
stop_grace_period
stop_grace_period
указывает, как долго реализация Compose ДОЛЖНА ждать при попытке остановить контейнер, если он не обрабатывает SIGTERM (или любой сигнал остановки, указанный с помощью stop_signal
), перед отправкой SIGKILL. Указывается как продолжительность.
stop_grace_period : 1с
stop_grace_period : 1м30с
Значение по умолчанию — 10 секунд для выхода контейнера перед отправкой SIGKILL.
stop_signal
stop_signal
определяет сигнал, который ДОЛЖНА использоваться реализацией Compose для остановки сервисных контейнеров. Если неустановленные контейнеры останавливаются реализацией Compose путем отправки файла SIGTERM
.
stop_signal: SIGUSR1
storage_opt
storage_opt
определяет параметры драйвера хранилища для службы.
storage_opt:
size: '1G'
sysctls
sysctls
определяет параметры ядра для установки в контейнере. sysctls
может использовать либо массив, либо карту.
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
Вы можете использовать только те sysctl, пространство имен которых находится в ядре. Docker не поддерживает изменение sysctl внутри контейнера, которое также изменяет хост-систему. Обзор поддерживаемых sysctls см. в разделе Настройка параметров ядра с пространством имен (sysctls) во время выполнения.
tmpfs
tmpfs
монтирует временную файловую систему внутри контейнера. Может быть одним значением или списком.
tmpfs: /run
tmpfs:
- /run
- /tmp
tty
tty
настроить сервисный контейнер для работы с TTY.
ulimits
ulimits
переопределяет ulimits по умолчанию для контейнера. Либо указывает как один предел как целое число, либо как мягкие/жесткие ограничения как сопоставление.
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
user
user
переопределяет пользователя, используемого для запуска процесса контейнера. По умолчанию устанавливается по изображению (например, Dockerfile USER
), если не задано, root
.
userns_mode
userns_mode
устанавливает пространство имен пользователя для службы. Поддерживаемые значения зависят от платформы и МОГУТ зависеть от конфигурации платформы.
userns_mode: "host"
volumes
volumes
определяет пути монтирования хоста или именованные тома, которые ДОЛЖНЫ быть доступны сервисным контейнерам.
volumes
Если монтирование является путем к хосту и используется только одной службой, оно МОЖЕТ быть объявлено как часть определения службы вместо ключа верхнего уровня .
Для повторного использования тома в нескольких службах именованный том ДОЛЖЕН быть объявлен в ключе верхнего уровняvolumes
.
В этом примере показан именованный том ( db-data
), используемый backend
службой, и монтирование с привязкой, определенное для одной службы.
services:
backend:
image: awesome/backend
volumes:
- type: volume
source: db-data
target: /data
volume:
nocopy: true
- type: bind
source: /var/run/postgres/postgres.sock
target: /var/run/postgres/postgres.sock
volumes:
db-data:
Синтаксис длинной формы позволяет настраивать дополнительные поля, которые не могут быть выражены в краткой форме.
type | тип крепления volume , bind или tmpfs npipe |
source | источник монтирования, путь на хосте для монтирования с привязкой или имя тома, определенное в ключе верхнего уровняvolumes . Неприменимо для монтирования tmpfs. |
target | путь в контейнере, куда смонтирован том |
read_only | флаг, чтобы сделать том доступным только для чтения |
bind | настроить дополнительные параметры привязки |
volume | настроить дополнительные параметры громкости |
tmpfs | настроить дополнительные параметры tmpfs |
consistency | соответствие требованиям крепления, доступные значения зависят от платформы |
volumes_from
volumes_from
монтирует все тома из другого сервиса или контейнера, опционально указывая доступ только для чтения (ro) или чтение-запись (rw). Если уровень доступа не указан, то ДОЛЖНЫ использоваться чтение-запись.
Строковое значение определяет другую службу в модели приложения Compose для подключения томов. Префикс container:
, если он поддерживается, позволяет монтировать тома из контейнера, который не управляется реализацией Compose.
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
working_dir
working_dir
переопределяет рабочий каталог контейнера по сравнению с указанным в образе (например, Dockerfile WORKDIR
).
driver
driver
указывает, какой драйвер следует использовать для этой сети. Реализации Compose ДОЛЖНЫ возвращать ошибку, если драйвер недоступен на платформе.
driver: overlay
Значения по умолчанию и доступные значения зависят от платформы. Спецификация Compose ДОЛЖНА поддерживать следующие конкретные драйверы: none
иhost
host | использовать сетевой стек хоста |
none | отключить сеть |
host or none
Синтаксис использования встроенных сетей, таких как host
и none
, отличается, поскольку такие сети неявно существуют вне области реализации Compose. Для их использования НЕОБХОДИМО определить внешнюю сеть с именем host
или none
и псевдонимом, который может использовать реализация Compose ( hostnet
или nonet
в следующих примерах), а затем предоставить службе доступ к этой сети, используя ее псевдоним.
services:
web:
networks:
hostnet: {}
networks:
hostnet:
external: true
name: host
services:
web:
...
networks:
nonet: {}
networks:
nonet:
external: true
name: none
driver_opts
driver_opts
указывает список параметров в виде пар ключ-значение для передачи драйверу для этой сети. Эти параметры зависят от драйвера — для получения дополнительной информации обратитесь к документации драйвера. Необязательный.
driver_opts:
foo: "bar"
baz: 1
attachable
Если attachable
установлено значение true
, то автономные контейнеры ДОЛЖНЫ иметь возможность подключаться к этой сети в дополнение к службам. Если автономный контейнер подключается к сети, он может взаимодействовать со службами и другими автономными контейнерами, которые также подключены к сети.
networks:
mynet1:
driver: overlay
attachable: true
enable_ipv6
enable_ipv6
включить сеть IPv6 в этой сети.
IPAM
ipam
указывает пользовательскую конфигурацию IPAM. Это объект с несколькими свойствами, каждое из которых является необязательным:
driver | Пользовательский драйвер IPAM вместо стандартного |
config | список с нулем или более элементами конфигурации |
options | параметры, специфичные для драйвера, в виде сопоставления ключ-значение |
ipam:
driver: default
config:
- subnet: 172.28.0.0/16
ip_range: 172.28.5.0/24
gateway: 172.28.5.254
aux_addresses:
host1: 172.28.1.5
host2: 172.28.1.6
host3: 172.28.1.7
options:
foo: bar
baz: "0"
internal
По умолчанию реализации Compose ДОЛЖНЫ обеспечивать внешнее подключение к сетям. internal
когда установлено true
разрешение на создание внешне изолированной сети.
labels
Добавляйте метаданные в контейнеры с помощью меток. Может использовать либо массив, либо словарь.
Пользователям СЛЕДУЕТ использовать обратную DNS-нотацию, чтобы предотвратить конфликт меток с метками, используемыми другим программным обеспечением.
labels:
com.example.description: "Financial transaction network"
com.example.department: "Finance"
com.example.label-with-empty-value: ""
labels:
- "com.example.description=Financial transaction network"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
Реализации Compose ДОЛЖНЫ устанавливать com.docker.compose.project
и com.docker.compose.network
метки.
external
Если установлено значение true
, external
указывает, что жизненный цикл этой сети поддерживается за пределами жизненного цикла приложения. Реализации Compose НЕ ДОЛЖНЫ пытаться создавать эти сети и выдают ошибку, если они не существуют.
В приведенном ниже примере proxy
это ворота во внешний мир. Вместо того, чтобы пытаться создать сеть, реализациям Compose СЛЕДУЕТ запросить у платформы существующую сеть, которую просто называют , outside
и подключить proxy
к ней контейнеры службы.
services:
proxy:
image: awesome/proxy
networks:
- outside
- default
app:
image: awesome/app
networks:
- default
networks:
outside:
external: true
name
name
устанавливает пользовательское имя для этой сети. Поле имени можно использовать для ссылок на сети, содержащие специальные символы. Имя используется как есть и не будет ограничиваться именем проекта.
networks:
network1:
name: my-app-net
Его также можно использовать в сочетании со external
свойством для определения сети платформы, которую должна получить реализация Compose, обычно с помощью параметра, поэтому файлу Compose не нужно жестко кодировать значения, специфичные для среды выполнения:
networks:
network1:
external: true
name: "${NETWORK_ID}"
driver
Укажите, какой драйвер тома следует использовать для этого тома. Значения по умолчанию и доступные значения зависят от платформы. Если драйвер недоступен, реализация Compose ДОЛЖНА вернуть ошибку и остановить развертывание приложения.
driver: foobar
driver_opts
driver_opts
указывает список параметров в виде пар ключ-значение для передачи драйверу для этого тома. Эти параметры зависят от драйвера.
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"
external
Если установлено значение true
, external
это указывает, что этот том уже существует на платформе и его жизненный цикл управляется вне приложения. Реализации Compose НЕ ДОЛЖНЫ пытаться создавать эти тома и ДОЛЖНЫ возвращать ошибку, если они не существуют.
В приведенном ниже примере вместо попытки создать том с именем {project_name}_db-data
Compose ищет существующий том с простым именем db-data
и монтирует его в backend
контейнеры службы.
services:
backend:
image: awesome/database
volumes:
- db-data:/etc/data
volumes:
db-data:
external: true
labels
labels
используются для добавления метаданных к томам. Вы можете использовать либо массив, либо словарь. Рекомендуется использовать обратную DNS-нотацию, чтобы ваши метки не конфликтовали с метками, используемыми другим программным обеспечением.
labels:
com.example.description: "Database volume"
com.example.department: "IT/Ops"
com.example.label-with-empty-value: ""
labels:
- "com.example.description=Database volume"
- "com.example.department=IT/Ops"
- "com.example.label-with-empty-value"
Составная реализация ДОЛЖНА устанавливать com.docker.compose.project
и com.docker.compose.volume
метки.
name
name
установить собственное имя для этого тома. Поле имени можно использовать для ссылки на тома, содержащие специальные символы. Имя используется как есть и не будет ограничиваться именем стека.
volumes:
data:
name: "my-app-data"
Его также можно использовать вместе с external
недвижимостью. При этом имя тома, используемого для поиска фактического тома на платформе, задается отдельно от имени, используемого для ссылки на него в файле Compose:
volumes:
db-data:
external:
name: actual-name-of-volume
Это позволяет сделать это имя поиска параметром файла Compose, чтобы идентификатор модели для тома был жестко закодирован, но фактический идентификатор тома на платформе задавался во время выполнения во время развертывания:
volumes:
db-data:
external:
name: ${DATABASE_VOLUME}