12factor config с Docker

Есть ли какие-либо общепринятые или общепринятые подходы к использованию переменных среды для управления поведением Докера, т.е. в 12-факторе?

Единственный язык-агностический метод, который я видел, - это загрязнение команды запуска docker с переменными -e. Наиболее удобное решение, которое я видел, это использование комбинации cat и sed для генерации параметров CLI с использованием файла .env: https://twitter.com/DataKyle/status/422843345120296960

В настоящее время мы используем Vagrant for dev, поставщика хостинга CI/CD для тестирования и развертывания, а также AWS Elastic Beanstalk в качестве PAAS. Наше приложение имеет более 100 настраиваемых параметров, большинство из которых настроены по умолчанию, но каждая среда по-прежнему должна настраивать около 10-20 из них. Похоже, слишком сложно взломать докеры с огромным списком таких переменных командной строки.

Кроме того, он не позволяет вам переносить переменные с хоста докера (например, предварительно установленные учетные данные Redis или Postgres провайдера CI), без дальнейшего взлома.

Есть ли решение для этого я не нашел? Или это недостающий кусок для Docker? Или это как-то философски против философии Докера?

8
задан rgareth 07 авг. '14 в 11:14
источник поделиться

1 ответ

Docker 0.10.0 и новее (8 апреля 2014 г.) принимает docker run --env-file <filename>, что позволяет вам загружать рабочую среду docker с .env -подобными файлами.

Кроме того, вы можете позволить докерам взаимодействовать дальше: --volumes-from может смонтировать все тома из указанного контейнера, а --link позволяет контейнеру узнать подробности об открытых портах, на которые ссылаются контейнеры.

Пока ссылка на запуск Docker немного слаба на данный момент, вы можете найти все детали в ссылке CLI , а также ссылку связывающую ссылку.

Как начать с контейнера. Обычно я рекомендую запустить оболочку script, которая устанавливает переменные среды по умолчанию (вдоль строк : ${ENV:=default_value}), экспортирует их, а затем exec один исполняемый файл. Этот исполняемый файл может быть желательным приложением на переднем плане или заменой init, например runit или supervisord.

Я бы не рекомендовал запускать sshd внутри вашего докера, если он не является частью системы (например, контейнер для gitlab должен содержать sshd, так как он предоставляет git репо-доступ через ssh). Для целей обслуживания или отладки я рекомендую вместо этого использовать nsenter.

3
ответ дан julian7 12 окт. '14 в 23:42
источник поделиться

Другие вопросы по меткам