Как передать переменные в Docker: пошаговое руководство для новичков.

Docker — это популярная платформа для создания, развертывания и запуска приложений в изолированных контейнерах.

Одним из важных аспектов работы с Docker является возможность передавать переменные внутри контейнера. Это помогает настройке приложений и автоматизации процессов.

Если вы новичок и хотите понять, как передать переменные в Docker, эта статья для вас. Разделим процесс на понятные шаги и объясним всё простым языком.

Почему важно передавать переменные в Docker?

Переменные помогают сделать контейнер более гибким и адаптируемым. Например:

  • Передавать секретные ключи и пароли без их жесткого указания в коде.
  • Настраивать параметры запуска приложения без изменения его исходного кода.
  • Управлять поведением контейнера при запуске.

Основные способы передачи переменных в Docker

Существует несколько способов передать переменные окружения в Docker-контейнер:

1. Использование флага -e при запуске контейнера

Самый простой способ — задать переменную прямо при запуске командой docker run. Пример без переменной:

[root@waky practice]# docker run ubuntu env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=492df5ea475f
HOME=/root
[root@waky practice]#

В этом случае контейнер запустится на образе ubuntu, и внутри него команда env выведет все переменные окружения, их всего три и это дефолтные переменные.

Используя флаг -e, можно добавить свою переменную.

[root@waky practice]# docker run -e MY_VAR=hello-world ubuntu env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=1e092efaf5ad
MY_VAR=hello-world
HOME=/root
[root@waky practice]#

Можете задавать сразу несколько переменных, добавляя -e для каждой.

[root@waky practice]# docker run -e MY_VAR_1=abc -e MY_VAR_2=123 ubuntu env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=fa35832155ac
MY_VAR_2=123
MY_VAR_1=abc
HOME=/root
[root@waky practice]#

2. Передача файла переменных через файл .env

Для удобства при работе с большим количеством переменных используют файл .env.

Создайте файл .env в той же папке, где запускаете Docker, например:

API_KEY=123456
DB_HOST=123.123.123.123
DB_PORT=3306

Запустите контейнер с помощью опции –env-file:

[root@waky practice]# docker run --env-file .env ubuntu env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=a7546a40e63b
API_KEY=123456
DB_HOST=123.123.123.123
DB_PORT=3306
HOME=/root
[root@waky practice]#

Все переменные из файла .env автоматически передадутся внутрь контейнера.

Этот способ удобен при использовании большого количества переменных без необходимости перечислять их все в командной строке.

3. Передача переменных через Dockerfile

Можно задать переменные окружения прямо в Dockerfile с помощью инструкции ENV. Но это делается при сборке образа и подходит для переменных, которые не меняются.

Если вы не знакомы с созданием образов и использованием Dockerfile вам поможет отдельная статья. Создадим в текущей директории Dockerfile следующего содержания:

FROM ubuntu
ENV MY_VAR=HelloFromDockerfile
CMD ["bash"]

Соберем образ my_image из Dockerfile и создадим из него контейнер:

[root@waky practice]# docker build -t my_image ./
[+] Building 0.7s (5/5) FINISHED
docker:default
 => [internal] load build definition from Dockerfile
0.0s
 => => transferring dockerfile: 153B
0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest 
0.0s
 => [internal] load .dockerignore
0.1s
 => => transferring context: 2B
0.0s
 => [1/1] FROM docker.io/library/ubuntu:latest
0.1s
 => exporting to image
0.1s
 => => exporting layers
0.0s
 => => writing image sha256:876ca8c2c0ee10a514b63141b9d3150fdee824fea188ec2d36d017f66bd90a34
0.0s
 => => naming to docker.io/library/my_image
0.0s
[root@waky practice]# docker run my_image env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=75744ee7908c
MY_VAR=HelloFromDockerfile
HOME=/root
[root@waky practice]#

Как видим, переменная, заданная в Dockerfile попала в контейнер.

Однако, стоит учитывать, что эта переменная задается еще на этапе сборки образа и ее можно перезаписать при создании контейнера используя -e:

[root@waky practice]# docker run -e MY_VAR=ReWriteVAR my_image env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=09e9d0a996cb
MY_VAR=ReWriteVAR
HOME=/root
[root@waky practice]#

Заключение

Передача переменных в Docker — важный инструмент для настройки приложений и автоматизации процессов.

Самые популярные способы — использование флага -e при запуске, файла .env, а также задания переменных в Dockerfile.

Если правильно использовать эти методы, ваш Docker-контейнер станет более гибким, а процессы — более управляемыми.