Тема
Задачи
Docker
Иcпользует Docker для запуска.
Конфигурация Docker задачи, отличается от конфигурации обычной задачи типом и опциями.
json
{
"type": "docker",
"options": {
// опции Docker задачи
}
}Свойства опций
| Наименование | Тип | Обязательное |
|---|---|---|
| image | string | Да |
| containerName | string | Нет |
| command | string | Нет |
| arguments | array | Нет |
| ports | array | Нет |
| volumes | array | Нет |
| env | Переменные окружения | Нет |
| envFile | array | Нет |
| network | string | Нет |
| autoRemove | boolean | Нет |
| user | string | Нет |
| workdir | string | Нет |
| entrypoint | string | Нет |
| privileged | boolean | Нет |
| restart | string | Нет |
| memory | string | Нет |
| cpus | string | Нет |
| hostname | string | Нет |
| stopSignal | string | Нет |
| stopTimeout | number | Нет |
| pull | string | Нет |
| ttl | number | Нет |
| log | Логирование задачи | Нет |
Описание свойств
image
Тип: string
Обязательное: Да
Имя Docker образа для запуска контейнера.
Пример:
json
{
"image": "node:18-alpine"
}containerName
Тип: string
Обязательное: Нет
Имя контейнера. Если не указано, Docker автоматически сгенерирует имя.
Пример:
json
{
"containerName": "my-app-container"
}command
Тип: string
Обязательное: Нет
Команда для выполнения в контейнере. Переопределяет CMD из Dockerfile.
Пример:
json
{
"command": "npm start"
}arguments
Тип: array
Обязательное: Нет
Элементы массива: string
Массив аргументов для команды.
Пример:
json
{
"arguments": ["--port", "3000", "--host", "0.0.0.0"]
}ports
Тип: array
Обязательное: Нет
Элементы массива: string
Массив проброса портов в формате "host:container".
Пример:
json
{
"ports": ["8080:80", "3000:3000"]
}volumes
Тип: array
Обязательное: Нет
Элементы массива: string
Массив монтирования томов в формате "host:container" или именованных томов.
Пример:
json
{
"volumes": ["./src:/app/src", "node_modules:/app/node_modules"]
}env
Тип: Переменные окружения
Обязательное: Нет
Переменные окружения для контейнера.
Пример:
json
{
"env": {
"NODE_ENV": "production",
"API_ADDRESS": "localhost:3000"
}
}envFile
Тип: array
Обязательное: Нет
Элементы массива: string
Массив путей к файлам с переменными окружения. Файлы должны содержать переменные в формате KEY=VALUE.
Пример:
json
{
"envFile": [".env", ".env.local"]
}network
Тип: string
Обязательное: Нет
Имя Docker сети для подключения контейнера.
Пример:
json
{
"network": "my-network"
}autoRemove
Тип: boolean
Обязательное: Нет
Автоматически удалять контейнер после его остановки.
Пример:
json
{
"autoRemove": true
}user
Тип: string
Обязательное: Нет
Пользователь в формате "user" или "user:group".
Пример:
json
{
"user": "1000:1000"
}workdir
Тип: string
Обязательное: Нет
Рабочая директория внутри контейнера.
Пример:
json
{
"workdir": "/app"
}entrypoint
Тип: string
Обязательное: Нет
Точка входа для контейнера. Переопределяет ENTRYPOINT из Dockerfile.
Пример:
json
{
"entrypoint": "/bin/sh"
}privileged
Тип: boolean
Обязательное: Нет
Запустить контейнер в привилегированном режиме.
Пример:
json
{
"privileged": false
}restart
Тип: string
Обязательное: Нет
Допустимые значения: "no", "always", "on-failure", "unless-stopped"
Политика перезапуска контейнера:
"no"- не перезапускать контейнер автоматически"always"- всегда перезапускать контейнер при остановке"on-failure"- перезапускать только при ошибке (ненулевой код выхода)"unless-stopped"- всегда перезапускать, кроме случаев когда контейнер был остановлен вручную
Пример:
json
{
"restart": "unless-stopped"
}memory
Тип: string
Обязательное: Нет
Ограничение памяти для контейнера. Можно указать в байтах или с суффиксами k, m, g (например, "512m", "2g").
Пример:
json
{
"memory": "512m"
}cpus
Тип: string
Обязательное: Нет
Ограничение количества CPU для контейнера. Можно указать дробное значение (например, "0.5", "2.0").
Пример:
json
{
"cpus": "1.5"
}hostname
Тип: string
Обязательное: Нет
Имя хоста для контейнера.
Пример:
json
{
"hostname": "api-server"
}stopSignal
Тип: string
Обязательное: Нет
Сигнал для остановки контейнера. По умолчанию используется SIGTERM.
Пример:
json
{
"stopSignal": "SIGINT"
}stopTimeout
Тип: number
Обязательное: Нет
Время ожидания в секундах перед принудительной остановкой контейнера. По умолчанию 10 секунд.
Пример:
json
{
"stopTimeout": 30
}pull
Тип: string
Обязательное: Нет
Допустимые значения: "always", "missing", "never"
Политика загрузки образа перед запуском контейнера:
"always"- всегда загружать образ"missing"- загружать только если образ отсутствует локально"never"- никогда не загружать образ
Пример:
json
{
"pull": "missing"
}ttl
Тип: number
Обязательное: Нет
Time To Live (время жизни) задачи в миллисекундах. Если задача выполняется дольше указанного времени, она будет принудительно остановлена.
Пример:
json
{
"ttl": 3600
}log
Тип: Логирование задачи
Обязательное: Нет
Настройки логирования для задачи.
Пример:
json
{
"log": {
"stdout": "./logs/docker-task.log"
}
}Docker Compose
Использует Docker Compose для запуска сервисов.
Конфигурация Docker Compose задачи, отличается от конфигурации обычной задачи типом и опциями.
json
{
"type": "docker-compose",
"options": {
// опции Docker Compose задачи
}
}Свойства опций
| Наименование | Тип | Обязательное |
|---|---|---|
| services | object | Да |
| networks | object | Нет |
| volumes | object | Нет |
| ttl | number | Нет |
| log | Логирование задачи | Нет |
Описание свойств
services
Тип: object
Обязательное: Да
Объект, содержащий определения сервисов. Ключи объекта - имена сервисов, значения - конфигурации сервисов.
Пример:
json
{
"services": {
"web": {
"image": "nginx:alpine",
"ports": ["8080:80"]
},
"api": {
"image": "node:18-alpine",
"command": "npm start"
}
}
}Свойства сервиса
| Наименование | Тип | Обязательное |
|---|---|---|
| image | string | Да |
| containerName | string | Нет |
| command | string | array | Нет |
| ports | array | Нет |
| volumes | array | Нет |
| environment | Переменные окружения | Нет |
| networks | array | Нет |
| dependsOn | array | Нет |
| restart | string | Нет |
| user | string | Нет |
| workdir | string | Нет |
| hostname | string | Нет |
| entrypoint | string | array | Нет |
| privileged | boolean | Нет |
| expose | array | Нет |
| extraHosts | array | Нет |
| stopSignal | string | Нет |
| stopGracePeriod | string | Нет |
| healthcheck | object | Нет |
Описание свойств сервиса
image
Тип: string
Обязательное: Да
Имя Docker образа.
Пример:
json
{
"image": "node:18-alpine"
}containerName
Тип: string
Обязательное: Нет
Имя контейнера. Если не указано, Docker автоматически сгенерирует имя.
Пример:
json
{
"containerName": "my-app-container"
}command
Тип: string | array
Обязательное: Нет
Команда для выполнения в контейнере.
Пример (строка):
json
{
"command": "python ./server.py"
}Пример (массив):
json
{
"command": ["python", "./server.py"]
}ports
Тип: array
Обязательное: Нет
Элементы массива: string
Массив проброса портов в формате "host:container".
Пример:
json
{
"ports": ["8080:80", "3000:3000"]
}volumes (service)
Тип: array
Обязательное: Нет
Элементы массива: string
Массив монтирования томов в формате "host:container" или именованных томов.
Пример:
json
{
"volumes": ["./src:/app/src", "node_modules:/app/node_modules"]
}environment
Тип: Переменные окружения
Обязательное: Нет
Переменные окружения для контейнера.
Пример:
json
{
"environment": {
"NODE_ENV": "production",
"API_ADDRESS": "localhost:3000"
}
}networks (service)
Тип: array
Обязательное: Нет
Элементы массива: string
Массив имен Docker сетей для подключения контейнера.
Пример:
json
{
"networks": ["frontend", "backend"]
}dependsOn
Тип: array
Обязательное: Нет
Элементы массива: string
Массив имен сервисов, от которых зависит данный сервис. Сервис будет запущен после запуска зависимостей.
Пример:
json
{
"dependsOn": ["database", "redis"]
}restart
Тип: string
Обязательное: Нет
Допустимые значения: "no", "always", "on-failure", "unless-stopped"
Политика перезапуска контейнера:
"no"- не перезапускать контейнер автоматически"always"- всегда перезапускать контейнер при остановке"on-failure"- перезапускать только при ошибке (ненулевой код выхода)"unless-stopped"- всегда перезапускать, кроме случаев когда контейнер был остановлен вручную
Пример:
json
{
"restart": "unless-stopped"
}user
Тип: string
Обязательное: Нет
Пользователь в формате "user" или "user:group".
Пример:
json
{
"user": "1000:1000"
}workdir
Тип: string
Обязательное: Нет
Рабочая директория внутри контейнера.
Пример:
json
{
"workdir": "/app"
}hostname
Тип: string
Обязательное: Нет
Имя хоста для контейнера.
Пример:
json
{
"hostname": "api-server"
}entrypoint
Тип: string | array
Обязательное: Нет
Точка входа для контейнера.
Пример (строка):
json
{
"entrypoint": "/bin/sh"
}Пример (массив):
json
{
"entrypoint": ["/bin/sh", "-c"]
}privileged
Тип: boolean
Обязательное: Нет
Запустить контейнер в привилегированном режиме.
Пример:
json
{
"privileged": false
}expose
Тип: array
Обязательное: Нет
Элементы массива: string
Массив портов для экспонирования другим сервисам (без публикации на хост).
Пример:
json
{
"expose": ["3000", "8080"]
}extraHosts
Тип: array
Обязательное: Нет
Элементы массива: string
Массив дополнительных записей для файла /etc/hosts контейнера в формате "hostname:ip".
Пример:
json
{
"extraHosts": ["host.docker.internal:host-gateway", "api.local:192.168.1.100"]
}stopSignal
Тип: string
Обязательное: Нет
Сигнал для остановки контейнера. По умолчанию используется SIGTERM.
Пример:
json
{
"stopSignal": "SIGINT"
}stopGracePeriod
Тип: string
Обязательное: Нет
Время ожидания перед принудительной остановкой контейнера (например, "10s", "1m"). По умолчанию 10 секунд.
Пример:
json
{
"stopGracePeriod": "30s"
}healthcheck
Тип: object
Обязательное: Нет
Настройки проверки здоровья контейнера.
Свойства healthcheck:
| Наименование | Тип | Обязательное |
|---|---|---|
| test | string | array | Да |
| interval | string | Нет |
| timeout | string | Нет |
| retries | number | Нет |
| start_period | string | Нет |
Пример:
json
{
"healthcheck": {
"test": ["CMD", "curl", "-f", "http://localhost:3000/health"],
"interval": "30s",
"timeout": "10s",
"retries": 3,
"start_period": "40s"
}
}test
Тип: string | array
Обязательное: Да (внутри healthcheck)
Команда для проверки здоровья. Может быть строкой или массивом строк.
Пример (строка):
json
{
"test": "curl -f http://localhost:3000/health || exit 1"
}Пример (массив):
json
{
"test": ["CMD", "curl", "-f", "http://localhost:3000/health"]
}interval
Тип: string
Обязательное: Нет
Интервал между проверками здоровья (например, "30s", "1m").
Пример:
json
{
"interval": "30s"
}timeout
Тип: string
Обязательное: Нет
Таймаут для проверки здоровья (например, "10s", "30s").
Пример:
json
{
"timeout": "10s"
}retries
Тип: number
Обязательное: Нет
Количество попыток проверки здоровья перед тем, как контейнер будет считаться нездоровым.
Пример:
json
{
"retries": 3
}start_period
Тип: string
Обязательное: Нет
Время инициализации контейнера перед началом проверок здоровья (например, "40s", "1m").
Пример:
json
{
"start_period": "40s"
}networks
Тип: object
Обязательное: Нет
Объект, содержащий определения сетей. Ключи объекта - имена сетей, значения - конфигурации сетей.
Пример:
json
{
"networks": {
"frontend": {},
"backend": {}
}
}volumes (top)
Тип: object
Обязательное: Нет
Объект, содержащий определения именованных томов. Ключи объекта - имена томов, значения - конфигурации томов.
Пример:
json
{
"volumes": {
"db-data": {},
"cache-data": {}
}
}ttl
Тип: number
Обязательное: Нет
Time To Live (время жизни) задачи в миллисекундах. Если задача выполняется дольше указанного времени, она будет принудительно остановлена.
Пример:
json
{
"ttl": 3600000
}log
Тип: Логирование задачи
Обязательное: Нет
Настройки логирования для задачи.
Пример:
json
{
"log": {
"stdout": "./logs/docker-compose-task.log"
}
}