docker-compose: где хранить конфигурацию для сервисов?

Я создаю стек ELK (elasticsearch / logstash / kibana), используя docker-compose / docker-machine. План состоит в том, чтобы развернуть его на капельку digitalocean и, при необходимости, использовать Swarm для его масштабирования.

Он работает очень хорошо, но я немного смущен, когда должен хранить конфигурацию для служб (например, файлы конфигурации для logstash или SSL-сертификаты для nginx).

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

Затем я подумал, что у меня есть очень умная идея: создайте контейнер данных со всей конфигурацией и позвольте другим службам обращаться к нему с помощью volumes_from :

 config: volumes: - /conf build: context: . # this just copies the conf folder into the image dockerfile: /dockerfiles/config/Dockerfile logstash: image: logstash:2.2 volumes_from: - config 

Проблема с этим подходом стала очевидной довольно быстро: каждый раз, когда я меняю какую-либо конфигурацию, мне нужно остановить все контейнеры, которые связаны с контейнером config, воссоздать конфигурационное изображение и контейнер, а затем снова запустить службы. Не отлично подходит для бесперебойной работы :(.

Итак, что лучше? В идеале файлы конфигурации будут находиться внутри контейнера, поэтому я могу просто отправить его туда, где есть.

Одним из распространенных решений этой проблемы является установка балансировки нагрузки перед службами. Таким образом, когда вы хотите изменить конфигурацию, вы можете запустить новый контейнер, и балансировщик нагрузки заберет его, а затем остановит старый контейнер. Нет простоев, и он позволяет перезагрузить конфигурацию.

Другим вариантом может быть использование именованного тома. Затем вы можете просто изменить содержимое именованного тома, и в нем будут отображаться новые файлы. Однако, если вы используете несколько узлов с роем, вам нужно будет использовать драйвер тома, поддерживающий тома нескольких хостов.

Вы считали использовать механизм расширения и переопределить файл настроек? Поместите второй docker-compose.override.yml в тот же каталог, что и основной файл docker-compose.override.yml , или используйте явное расширение в файле компоновки. Видеть

https://docs.docker.com/compose/extends/

Таким образом, вы можете интегрировать файл конфигурации прозрачным способом или управлять параметрами, которые вы хотите изменить, с помощью переменных среды, которые отличаются от основной композиции.