Публикация Compose-приложения с переменными окружения
На этом шаге мы научимся включать переменные окружения в Docker Compose-приложение и как это влияет на публикацию. Переменные окружения — это распространённый способ конфигурации приложений, и Docker Compose предоставляет несколько методов для работы с ними.
Сначала остановим работающий контейнер Nginx из предыдущего шага. Перейдите в директорию ~/project
, если вы ещё не там.
cd ~/project
Остановите работающие сервисы с помощью команды docker-compose down
.
docker-compose down
Теперь изменим файл docker-compose.yaml
, добавив переменную окружения. Мы добавим простую переменную MY_VARIABLE
в сервис web
. Откройте файл docker-compose.yaml
в директории ~/project
с помощью nano
.
nano ~/project/docker-compose.yaml
Добавьте секцию environment
в определение сервиса web
. Укажем переменную MY_VARIABLE
со значением.
version: "3.8"
services:
web:
image: nginx@sha256:your_image_digest_here ## Замените на ваш дайджест
ports:
- "80:80"
environment:
- MY_VARIABLE=HelloFromCompose
Не забудьте заменить your_image_digest_here
на фактический дайджест образа, полученный на предыдущем шаге.
Сохраните файл, нажав Ctrl + S
, и выйдите из редактора, нажав Ctrl + X
.
Теперь при запуске приложения через docker-compose up
переменная MY_VARIABLE
будет установлена внутри контейнера Nginx.
docker-compose up -d
Чтобы проверить установку переменной внутри контейнера, выполним команду через docker exec
. Сначала найдём ID контейнера с помощью docker ps
.
docker ps
Запомните Container ID работающего контейнера Nginx. Затем используйте docker exec
для выполнения команды printenv
внутри контейнера с фильтрацией вывода по MY_VARIABLE
.
docker exec < container_id > printenv | grep MY_VARIABLE
Замените <container_id>
на фактический ID вашего контейнера. Вы должны увидеть вывод вида MY_VARIABLE=HelloFromCompose
.
При публикации Compose-приложения с переменными окружения необходимо учитывать, как эти переменные будут предоставлены в целевой среде.
Распространённый подход — использование файла .env
. Docker Compose автоматически ищет файл с именем .env
в директории с docker-compose.yaml
. Вы можете определить переменные окружения в этом файле, и Compose загрузит их.
Создадим файл .env
в директории ~/project
.
nano ~/project/.env
Добавьте следующее содержимое в файл .env
:
ANOTHER_VARIABLE=ThisIsFromDotEnv
Сохраните файл и выйдите из nano
.
Теперь изменим файл docker-compose.yaml
для использования новой переменной. Снова откройте файл.
nano ~/project/docker-compose.yaml
Добавьте ANOTHER_VARIABLE
в секцию environment
.
version: "3.8"
services:
web:
image: nginx@sha256:your_image_digest_here ## Замените на ваш дайджест
ports:
- "80:80"
environment:
- MY_VARIABLE=HelloFromCompose
- ANOTHER_VARIABLE
Обратите внимание, что для ANOTHER_VARIABLE
мы просто указали имя переменной. Compose будет искать эту переменную в окружении, где выполняется docker-compose up
, включая переменные из файла .env
.
Сохраните файл и выйдите из nano
.
Теперь остановите и перезапустите приложение для применения изменений.
docker-compose down
docker-compose up -d
Получите новый ID контейнера с помощью docker ps
.
docker ps
Проверьте обе переменные внутри контейнера:
docker exec < container_id > printenv | grep MY_VARIABLE
docker exec < container_id > printenv | grep ANOTHER_VARIABLE
Замените <container_id>
на новый Container ID. В выводе должны отобразиться обе переменные: MY_VARIABLE=HelloFromCompose
и ANOTHER_VARIABLE=ThisIsFromDotEnv
.
При публикации обычно предоставляют файл docker-compose.yaml
и инструкции по настройке переменных окружения — через файл .env
или установку напрямую в окружении. Конфиденциальные данные не следует хранить в docker-compose.yaml
или .env
— для них следует использовать специализированные решения для управления секретами.