Мне очень нравятся идеи, лежащие в основе Манифеста Двенадцати Факторов. Я пытаюсь применить их к небольшому развертыванию в стиле микросервиса для проекта Python/Django. Проект Django упакован в контейнер Docker, который развертывается через Docker Hub.
Единственное, что я пытаюсь понять, это как работать с файлами конфигурации и переменными среды. Здравый смысл 12-факторных приложений заключается в том, что конфигурация должна храниться как переменные среды, а не в системе управления версиями. Я думаю реализовать это с помощью django-environ, который проверяет переменные среды, а также файл .env
для использовать в разраб.
Как тогда установить эти переменные среды в рабочей среде?
- В Docker можно объявить переменные среды как
ENV
в Dockerfile (doc< /а>). Так что я могу добавить туда эту информацию, но я проверяю Dockerfile с исходным кодом, так что это противоречит цели. - Я мог бы создать дополнительный файл
.env
для производства и не возвращать его в систему управления версиями. Я могу скопировать этот производственный файл.env
при создании образа с помощью командыCOPY
. Но это означает, что разработчик будет иметь доступ к учетным данным БД. - Настройте настраиваемый триггер сборки, чтобы при обновлении кода в системе управления версиями запускался триггер сборки. Когда образ создается, этот узел сборки добавляет этот файл
.env
и развертывает его на сервере.
Я чувствую, что третий вариант - единственный, который имеет смысл. Но даже в этом случае элементы конфигурации по-прежнему хранятся в файле, а не в переменных среды.
Любые идеи, как это сделать?
docker run -e FOO=bar image
. Кроме того, вы можете прочитать их из файла, передающего--env-file file
. Кроме того, я считаю, что пользовательский триггер сборки также нарушит мудрость, поскольку вы бы жестко закодировали переменные cnofiguration в образе докера. Это также относится к командеCOPY
. Другой возможностью может быть монтирование файла конфигурации, но это следует делать только в том случае, если использование переменных окружения невозможно. - person Lukas Juhrich   schedule 27.10.2015.env
на хосте и смонтировать его в Docker, представьте, что Django его подхватит? - person user1496984   schedule 03.11.2015.env
с файлами конфигурации монтирования!.env
файлы (используемые через--env-file
) — это просто своего рода «стенографическая запись» для передачи переменных среды, в то время как монтирование файла конфигурации активно добавляет что-то в контейнер докера (то есть в его файловую систему). Использование переменных среды является лучшим (более чистым) вариантом, так как вы оставляете сам контейнер нетронутым, и, кроме того, для этого они и существуют — предоставление информации об окружающей среде, т. е. с какими параметрами должно использоваться приложение. - person Lukas Juhrich   schedule 04.11.2015