#docker
Сегодня обсудим две инструкции внутри Dockerfile: ARG и ENV.
TL;DR Используйте ARG для определения build-time переменных, а ENV – run-time. Используйте ENV=arg_var_name, чтобы создать образ с переменной определяемой в ходе сборки.
Инструкция ARG определяет build-time variables. Они доступны только во время сборки docker image во всех инструкциях включая FROM. Запущенный контейнер не могут получить к доступ к этим переменным. Это также относится к инструкциям CMD и ENTRYPOINT, которые определяют, что контейнер должен запускать по умолчанию. Если вы не указываете значение по умолчанию для ARG, то при сборке передача аргументов обязательна. Для этого используется
--build-arg. Пример:ARG some_variable_name# or with a hard-coded default:#ARG some_variable_name=worldRUN echo "Hello $some_variable_name"$ docker build --build-arg some_variable_name=a_valueПеременные ENV также доступны во время сборки. Однако, в отличие от ARG, они доступны внутри запущенного контейнера. Значения ENV можно переопределить при запуске контейнера.
ENV и ARG можно комбинировать вместе.
Пример из реального проекта:
FROM node:14.17.1-alpineARG VERSION=latestENV VERSION=$VERSIONENV PORT=8000WORKDIR /opt/app/COPY package.json package-lock.json /opt/app/RUN npm install --productionCOPY src /opt/app/EXPOSE $PORTENTRYPOINT ["node", "/opt/app/index.js"]Внутри запущенного контейнера можно использовать переменные окружения PORT и VERSION