Ответ
Для передачи динамических значений в Dockerfile используются инструкции ARG (аргументы сборки). Их значения задаются во время вызова docker build с помощью флага --build-arg.
Пример Dockerfile:
FROM alpine:latest
# Объявляем аргумент с возможным значением по умолчанию
ARG APP_VERSION=latest
ARG BUILD_ENV=production
# ARG-переменные доступны на этапе сборки (RUN)
RUN echo "Сборка версии ${APP_VERSION} для окружения ${BUILD_ENV}" &&
apk add --no-cache some-package-${APP_VERSION}
# Чтобы использовать значение в runtime, его нужно передать через ENV
ENV APP_VERSION=${APP_VERSION}
Сборка с передачей аргументов:
docker build
--build-arg APP_VERSION=2.5.0
--build-arg BUILD_ENV=staging
-t myapp:latest .
Ключевые моменты:
- Область видимости:
ARGпеременные доступны только на этапеbuild(в инструкцияхRUN). Они не сохраняются в итоговом образе. - Многоэтапные сборки:
ARGнужно объявлять заново в каждом этапе (stage), где они требуются. - Предопределенные ARG: Docker предоставляет несколько предопределенных аргументов, таких как
HTTP_PROXY, которые также можно передавать через--build-arg. - Безопасность: Не используйте
ARGдля передачи секретов (паролей, токенов), так как их значения видны в истории сборки. Для секретов используйте--secret(экспериментальная функция) или multi-stage build с копированием только результата.