Шаблон docker-compose.yml
Шаблон docker-compose.yml#
version: '3.8'
networks:
app-net:
driver: overlay
# Не должно быть привязки к подсети, она может быть любой
services:
nginx-front:
image: my_best_image:latest
# Нужно указать корректный контейнер и путь к registry
networks:
- app-net
# Названия сетей
ports:
- "80:80"
# Порты должны быть указаны
volumes:
- /etc/localtime:/etc/localtime:ro
# Используется только для того, чтобы синхронизировать
# часовой пояс внутри контейнера и хостовой машины
- /mnt/shared_vol:/www/public/upload
# Следует учесть, что предоставляется монтированный каталог
# на хостовой машине, репликация проходит между всеми хостами
# по тем же путям
# Рекомендуется использовать docker config для публикации конфигов
# для всех контейнеров, где они должны быть
configs:
- source: nginx-conf
target: /etc/nginx/nginx.conf
- source: virtual-host-conf
target: /etc/nginx/conf.d/default.conf
- source: public-key-pem-v0.02
target: /etc/nginx/ssl/nginx.public.pem
# Хранение чувствительных данных -- в docker secret
secrets:
- source: private-key
target: nginx.private.key
deploy:
replicas: 3
# Нужно указывать расчётное количество в соответствии с нагрузкой,
# DevOps может управлять количеством реплик
placement:
max_replicas_per_node: 1
# Стандартная политика, которая рекомендуется, но не обязательна
update_config:
parallelism: 1
delay: 2s
restart_policy:
condition: any
delay: 5s
window: 20s
configs:
# Есть несколько подходов к управлению версиями конфигов
# Начну с того, который считаю самым удобным
nginx-conf:
name: nginx-conf-${NGINX_CONF_VER}
file: /path/to/nginx.conf
# В таком варианте версия конфига задаётся переменной окружения
# либо перед деплоем:
# export NGINX_CONF_VER=01
# либо прямо в момент деплоя
# NGINX_CONF_VER=01 docker stack deploy ...
#
# name: позволяет задать версию конфига в одном месте, а в разделе configs
# разных служб использовать идентификатор nginx-conf
#
# Для смены версии конфига не нужно редактировать файл compose
# или переименовывать файл-источник конфига
virtual-host-conf:
name: virtual-host-conf_v0.01
file: /path/to/virtual-host.conf
# Вариант без переменной окружения.
# Минус в том, что для смены версии конфига требуется изменить compose файл
# (но изменения вносить только в name: )
public-key-pem-v0.02:
external: true
# В таком варианте (а) конфиг создаётся с помощью команды
# docker config create ... *до* деплоя стека
# (б) для создания новой версии конфига снова требуется изменять compose
# файл, но на этот раз как в глобальном сonfigs, так и для каждой службы,
# где он используется
secrets:
private-key:
external: true