Приложения с двенадцатью факторами для развертывания микросервисов Docker

Мне очень нравятся идеи, лежащие в основе Манифеста Двенадцати Факторов. Я пытаюсь применить их к небольшому развертыванию в стиле микросервиса для проекта Python/Django. Проект Django упакован в контейнер Docker, который развертывается через Docker Hub.

Единственное, что я пытаюсь понять, это как работать с файлами конфигурации и переменными среды. Здравый смысл 12-факторных приложений заключается в том, что конфигурация должна храниться как переменные среды, а не в системе управления версиями. Я думаю реализовать это с помощью django-environ, который проверяет переменные среды, а также файл .env для использовать в разраб.

Как тогда установить эти переменные среды в рабочей среде?

Я чувствую, что третий вариант - единственный, который имеет смысл. Но даже в этом случае элементы конфигурации по-прежнему хранятся в файле, а не в переменных среды.

Любые идеи, как это сделать?


person user1496984    schedule 27.10.2015    source источник
comment
При использовании контейнеров Docker в целом рабочий процесс передает переменные среды в команду docker, например docker run -e FOO=bar image. Кроме того, вы можете прочитать их из файла, передающего --env-file file. Кроме того, я считаю, что пользовательский триггер сборки также нарушит мудрость, поскольку вы бы жестко закодировали переменные cnofiguration в образе докера. Это также относится к команде COPY. Другой возможностью может быть монтирование файла конфигурации, но это следует делать только в том случае, если использование переменных окружения невозможно.   -  person Lukas Juhrich    schedule 27.10.2015
comment
См. также stackoverflow.com/questions/25177402 /   -  person ebullient    schedule 29.10.2015
comment
@Luke В качестве последней возможности вы упомянули, что монтирование файла конфигурации должно быть последним вариантом. Прочитав об этом еще немного, у меня сложилось впечатление, что это должен быть лучший вариант, не так ли? Иметь файл .env на хосте и смонтировать его в Docker, представьте, что Django его подхватит?   -  person user1496984    schedule 03.11.2015
comment
@user1496984 user1496984 не путайте использование файлов .env с файлами конфигурации монтирования! .env файлы (используемые через --env-file) — это просто своего рода «стенографическая запись» для передачи переменных среды, в то время как монтирование файла конфигурации активно добавляет что-то в контейнер докера (то есть в его файловую систему). Использование переменных среды является лучшим (более чистым) вариантом, так как вы оставляете сам контейнер нетронутым, и, кроме того, для этого они и существуют — предоставление информации об окружающей среде, т. е. с какими параметрами должно использоваться приложение.   -  person Lukas Juhrich    schedule 04.11.2015