Утилита forge позволяет динамически обновлять конфигурацию файлов docker compose и docker swarm.
Для контроля версий используется хранилище Vault.
Для работы утилиты необходимо создать конфигурационный файл forge.yml в директории /var/forge/. Пример:
vault:
url: http://127.0.0.1:8080
token: vault_tokenСпецификация позволяет отслеживать образ и его тег. Пример:
docker-compose.yaml
services:
registry:
image: {{.Image}}:{{.Tag}}
container_name: registry
restart: unless-stopped
ports:
- 5050:5050
volumes:
- ./conf:/registry/conf.d:ro
- registry-data:/registry/var
volumes:
registry-data:При инициализации конфигурационного файла в хранилище Vault появится секрет:

Спецификация позволяет отслеживать названия образа и его тег и количество реплик. Пример:
docker-stack.yaml
services:
registry:
image: {{.Image}}:{{.Tag}}
deploy:
resources:
limits:
cpus: "0.40"
memory: 400M
reservations:
cpus: "0.30"
memory: 400M
mode: replicated
replicas: {{.Replicas}}
restart_policy:
condition: on-failure
max_attempts: 3
window: 15s
update_config:
parallelism: 1
delay: 10s
order: start-first
failure_action: rollback
rollback_config:
parallelism: 1
delay: 10s
order: start-first
failure_action: rollback
ports:
- 5050:5050
volumes:
- ./conf:/registry/conf.d:ro
- registry-data:/registry/var
volumes:
registry-data:При инициализации конфигурационного файла в хранилище Vault появится секрет:

Перед инициализацией конфигурационного файла необходимо создать шаблон и расположить его в каталоге var/forge/templates.
Инициализация конфигурационных файла разрешена только из списка доступных шаблонов.
forge env tmpl listВыводит список доступных шаблонов.
forge env init <project> -t <template.yml> -m composeСопоставляет шаблон указанного файла и создает vault secret исходя из его спецификации.
параметры:
<project>название проекта.
флаги:
-tфайл конфигурации;-mспецификация файла. По-умолчаниюcompose. Разрешенные значения:compose|swarm
пример команды:
forge env init dev -t template.yaml -m composeforge env set <project> -p tag=<string> -p replicas=<number>Обновляет параметры модели указанного проекта согласно спецификации.
параметры:
<project>название проекта.
флаги:
-pпараметр, который необходимо обновить. Можно указать несколько.
пример команды:
forge env set dev -p tag=alpineДля спецификации docker swarm можно обновлять один произвольный параметр или указать сразу два.
forge env get <project>forge env get <project> -cВыводит информацию о текущей конфигурации указанного проекта.
параметры:
<project>название проекта.
флаги:
-cвывод конфигурационного файла.
пример команды:
forge env get devПри вызове команды без флагов в консоль будет выведен форматированный вывод данных согласно спецификации.
forge env versions <project>Выводит информацию о версиях конфигурации указанного проекта.
параметры:
<project>название проекта.
пример команды:
forge env versions devforge env rollback <project> <version> -v <version>Откатывает конфигурацию проекта до указанной версии.
параметры:
<project>название проекта.
флаги:
-vверсия конфигурации в Vault.
пример команды:
forge env rollback dev -v 2forge completion bash > completion.sh
chmod +x completion.sh
sudo mv completion.sh /etc/bash_completion.d/
source ./bashrc