Оценок пока нет Спецификация docker-compose.yml

Данная базовая спецификация по Docker Compose представляет из себя материал для бустрого освоения или освежения памяти по данному инструменту.  

Данный вводный курс преследует 2 цели:

  1. быстро освоить базовые концепции
  2. быстро пройтись и вспомнить основные понятия и возможности, не тратя время на ненужные моменты

поэтому, самый момент сохранить ссылку на данный пост в закладках. Для быстрой навигации можете пользоваться удобной навигацией по тексту

[search-in-place-form in_current_page=»1″]

Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. С Compose вы используете файл YAML для настройки служб вашего приложения. Затем с помощью одной команды вы создаете и запускаете все службы из вашей конфигурации.

Compose работает на всех этапах: производстве, подготовке, разработке, тестировании, а также рабочих процессах непрерывной интеграции.

Использование Compose в основном состоит из трех шагов:

  1. Определение среды своего приложения с помощью , Dockerfileчтобы его можно было воспроизвести где угодно.
  2. Определение службы, из которых состоит ваше приложение, docker-compose.yml чтобы их можно было запускать вместе в изолированной среде.
  3. Запустите 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 быть переносимым.
argsargsопределить аргументы сборки, т.е. значения Dockerfile ARG.
sshsshопределяет аутентификацию SSH, которую сборщик образов ДОЛЖЕН использовать во время сборки образа (например, клонирование частного репозитория)
cache_fromcache_fromопределяет список источников, которые сборщик изображений ДОЛЖЕН использовать для разрешения кэша.
cache_tocache_toопределяет список мест экспорта, которые будут использоваться для совместного использования кэша сборки с будущими сборками.
extra_hostsextra_hostsдобавляет сопоставления имен хостов во время сборки. Используйте тот же синтаксис, что и extra_hosts .
isolationisolationопределяет технологию изоляции контейнера сборки. Поддерживаемые значения, подобные изоляции , зависят от платформы.
labelslabelsдобавить метаданные к полученному изображению. labelsможет быть задан как массив или карта.
shm_sizeshm_sizeустановливает размер общей памяти (/dev/shmраздела в Linux), выделенной для сборки образа Docker. Задайте как целочисленное значение, представляющее количество байтов, или как строку, выражающую значение байта .
targettargetопределяет этап для сборки, как определено внутри многоэтапного Dockerfile.
Свойства параметра build

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Точная настройка распределения полосы пропускания по устройствам.
Свойства параметра blkio_config

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

intervaltimeoutи 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 .

aliasesaliasesобъявляет альтернативные имена хостов для этой службы в сети. 
Другие контейнеры в той же сети могут использовать либо имя службы, либо этот псевдоним для подключения к одному из контейнеров службы.
ipv4_address, ipv6_addressУкажите статический IP-адрес для контейнеров для этой службы при подключении к сети.
link_local_ipslink_local_ipsуказывает список локальных IP-адресов. 
Link-local IP-адреса — это специальные IP-адреса, которые принадлежат хорошо известной подсети и полностью управляются оператором, обычно в зависимости от архитектуры, в которой они развернуты. 
Реализация зависит от платформы.
prioritypriorityуказывает, в каком порядке реализации Compose СЛЕДУЕТ подключать контейнеры службы к своим сетям. 
Если не указано, значение по умолчанию равно 0.
Свойства параметра networks

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), не указан означает любой протокол
modehostдля публикации хост-порта на каждом узле или ingressдля балансировки нагрузки порта.
Свойства параметра ports


Синтаксис длинной формы позволяет настраивать дополнительные поля, которые не могут быть выражены в краткой форме.

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

Если pull_policyи buildоба представлены, реализации Compose ДОЛЖНЫ создавать образ по умолчанию. Реализации Compose МОГУТ переопределить это поведение в цепочке инструментов.

read_only

read_onlyнастраивает создание сервисного контейнера с файловой системой, доступной только для чтения.

restart

restartопределяет политику, которую платформа будет применять при закрытии контейнера.

noполитика перезапуска по умолчанию. Ни при каких обстоятельствах не перезапускает контейнер.
alwaysполитика всегда перезапускает контейнер до его удаления.
on-failureполитика перезапускает контейнер, если код выхода указывает на ошибку.
unless-stoppedполитика перезапускает контейнер независимо от кода выхода, но прекращает перезапуск при остановке или удалении службы.
Свойства параметра restart
    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тип крепления volumebindили tmpfs npipe
sourceисточник монтирования, путь на хосте для монтирования с привязкой или имя тома, определенное в ключе верхнего уровняvolumes. Неприменимо для монтирования tmpfs.
targetпуть в контейнере, куда смонтирован том
read_onlyфлаг, чтобы сделать том доступным только для чтения
bind
настроить дополнительные параметры привязки
volumeнастроить дополнительные параметры громкости
tmpfsнастроить дополнительные параметры tmpfs
consistencyсоответствие требованиям крепления, доступные значения зависят от платформы
Свойства параметра volumes

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отключить сеть
Свойства параметра driver

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
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

Если установлено значение trueexternalуказывает, что жизненный цикл этой сети поддерживается за пределами жизненного цикла приложения. Реализации 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

Если установлено значение trueexternalэто указывает, что этот том уже существует на платформе и его жизненный цикл управляется вне приложения. Реализации Compose НЕ ДОЛЖНЫ пытаться создавать эти тома и ДОЛЖНЫ возвращать ошибку, если они не существуют.

В приведенном ниже примере вместо попытки создать том с именем {project_name}_db-dataCompose ищет существующий том с простым именем 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}

Пожалуйста, оцените материал

WebSofter

Web - технологии