Docker совет №21: Использование переменных окружения

Apr 12, 2018 08:07 · 305 words · 2 minute read docker

Docker позволяет нам устанавливать переменные окружения как во время сборки docker-образов, так и во время запуска docker-контейнеров (к слову, при запуске также можно переопределять переменные указанные во время сборки). Давайте разберемся!

Рано или поздно наступит время, когда вам необходимо будет добавить переменную окружения к своему экземпляру docker-образа, и значение этой переменной должно отличаться в зависимости от того, где собирается образ. Конечно же, каждый раз редактировать Dockerfile, меняя это значение, и пересобирать образ - не вариант. Еще может потребоваться заменить значение переменной во время запуска docker-контейнера из собранного образа.

Добавим в Dockerfile пару новых инструкций, например:

FROM alpine:3.7

ARG APP_ENV=production
ENV APP_ENV="${APP_ENV}"

Вместо APP_ENV вы можете написать RAILS_ENV, NODE_ENV или любую другую переменную окружения, значение которой вы хотите установить во время сборки docker-образа.

Названия переменных которые используются в инструкциях ARG и ENV не обязательно должны совпадать, но я советую для удобства делать их одинаковыми. В приведенном выше примере при запуске контейнера переменная окружения (APP_ENV) по умолчанию будет иметь значение, установленное в инструкции ARG на этапе сборки docker-образа (production). Убедимся в этом:

# Обычная сборка docker-образа (build), запуск контейнера (run) и получение значения переменной:
docker build -t my_test_app .
docker run --rm my_test_app env | grep APP_ENV
> APP_ENV=production

Сборка docker-образа с переопределенным значением переменной с помощью параметра --build-arg, запуск контейнера и получение значения переменной:

docker build -t my_test_app --build-arg APP_ENV=staging .
docker run --rm my_test_app env | grep APP_ENV
> APP_ENV=staging

Переопределение значения переменной окружения во время запуска контейнера выглядит так:

docker run --rm -e APP_ENV=development my_test_app env | grep APP_ENV
> APP_ENV=development

Если вы используете утилиту docker-compose, то конфигурационный файл docker-compose.yml может выглядеть так:

version: "3"

services:
  my_test_app:
    build:
      context: "."
      args:
        APP_ENV: "helloworld"

Теперь, если выполнить команду docker-compose up --build и проверить переменные окружения в docker-контейнере, то можно увидеть APP_ENV=helloworld - как и ожидалось, значение переменной соответствует тому, которое было установлено в конфигурационном файле.

tweet Share