Ответ 1
Docker v1.9 или новее
Если вы используете Docker v1.9 или новее, это возможно благодаря поддержке аргументов времени построения. Аргументы объявляются в Dockerfile
с использованием инструкции ARG.
ARG REQUIRED_ARGUMENT
ARG OPTIONAL_ARGUMENT=default_value
Когда вы позже создаете свое изображение с помощью docker build
, вы можете передавать аргументы с помощью флага --build-arg
, как описано в docker docs.
$ docker build --build-arg REQUIRED_ARGUMENT=this-is-required .
Обратите внимание, что рекомендуется не использовать переменные времени сборки для паролей или секретов, таких как ключи или учетные данные.
Кроме того, переменные времени построения могут иметь большое влияние на кеширование. Поэтому Dockerfile должен быть сконструирован с большой осторожностью, чтобы иметь возможность максимально использовать кеширование и ускорять процесс сборки.
Изменить: после ввода leedm777: s answer добавлен "докер более новый, чем v1.9".
Докер перед v1.9
Если вы используете докер-версию до 1.9, подход ARG
/--build-arg
невозможен. Вы не могли разрешить эту информацию во время сборки, поэтому вам пришлось передать их в качестве параметров команде docker run
.
Изображения Docker должны быть последовательными с течением времени, тогда как контейнеры могут быть изменены и рассматриваться как "отбрасывающие процессы".
- Подробнее о ENV
- Обсуждение докеров о динамических сборках
Старое решение этой проблемы заключалось в использовании шаблонов. Это не аккуратное решение, но в то время было одним из немногих жизнеспособных вариантов. (Вдохновение от это обсуждение).
- сохранить все ваши динамические данные в файле json или yaml
- создать шаблон шаблона docker, в котором динамическая версия может быть впоследствии расширена.
- напишите script, который создает файл Docker из данных конфигурации, используя некоторую библиотеку шаблонов, с которой вы знакомы с