Як задати змінні середовища в Docker?
Docker - це універсальний інструмент, який забезпечує однакове середовище розробки на різних платформах. Змінні середовища в Docker відіграють важливу роль у налаштуванні застосунків усередині Docker-контейнера.
У цьому гайді ви ознайомитеся з основною інформацією про змінні середовища Docker. Крім того, ви дізнаєтеся, як задати змінні середовища Docker різними способами, зокрема задати або перевизначити їх через команди Docker CLI і Docker Compose, а також розглянете кілька найкращих практик.
Що таке змінні середовища Docker?
Змінні середовища Docker - це заздалегідь визначені значення, які впливають на всі застосунки всередині контейнера. Вони слугують різним цілям, наприклад визначають поведінку застосунку, задають параметри конфігурації для Docker-образів і дають змогу безпечно зберігати конфіденційну інформацію, як-от облікові дані бази даних і API-ключі.
Ці змінні важливі для підвищення переносимості та гнучкості контейнера. Використовуючи змінні середовища, ви можете змінювати налаштування залежно від середовища розгортання без повторного збирання образу. Це дає змогу передавати конфігурацію під час виконання, завдяки чому контейнер може працювати в різних середовищах, а його загальна переносимість підвищується. Середовище контейнера задається лише тоді, коли його явно визначено в конфігурації сервісу.
Як задати змінні середовища Docker у Dockerfile?
Dockerfile визначає всі кроки, необхідні для збирання Docker-образу, і дає змогу задавати два типи змінних:
ENV: Environment variables
ARG: Build-time variables
Змінні ENV
Змінні середовища, задані за допомогою ENV , застосовуються до будь-якого контейнера, створеного з образу. Формат задання змінної середовища в Dockerfile такий:
ENV env_variable_name=value
Змінні ARG
Змінні часу збирання визначаються за допомогою ARG і можуть передаватися під час збирання.
Нижче наведено приклад Dockerfile, у якому використовуються змінні середовища:
# Use an official Node.js runtime as a parent image
FROM node:14
# Set environment variables
ENV NODE_ENV=production
ENV PORT=3000
# Set the working directory
WORKDIR /usr/src/app
# Copy package.json and package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy the rest of the application code
COPY . .
# Expose port 3000
EXPOSE 3000
# Run the app
CMD ["npm", "start"]
У цьому прикладі NODE_ENV і PORT - це змінні середовища, задані за допомогою директиви ENV. Ці змінні будуть доступні в будь-якому контейнері, зібраному з цього Dockerfile.
Перегляд змінних середовища Docker: перегляд і керування змінними в Docker-контейнері
Щоб переглянути змінні середовища, задані в Docker-контейнері або образі, Docker надає кілька способів налагодження та перевірки.
1. Використання команди docker inspect
Команда docker inspect дає змогу переглянути детальну інформацію про контейнер або образ, зокрема змінні середовища Docker. Ось як її можна використати:
docker inspect --format '{{.Config.Env}}' <containerId_or_imageId>
Замініть <containerId_or_imageId> на фактичний ID вашого контейнера або образу. Ця команда отримує та відображає лише змінні середовища Docker (Env) у форматованому JSON-виводі. Це зручно, щоб швидко перевірити, які змінні наразі налаштовано в екземплярах Docker.
2. Використання команди docker exec
Інший спосіб переглянути налаштовані змінні середовища Docker - скористатися командою docker exec. Ось як це зробити:
docker exec <containerID> env
Замініть <containerID> на ID вашого запущеного контейнера. Ця команда виконає команду env усередині вказаного контейнера та виведе список усіх змінних середовища, які в ньому наразі задано.
Як задати змінні середовища Docker за допомогою Docker Compose?
Використання CLI для задання змінних середовища Docker під час виконання - не найкращий варіант для багатоконтейнерних застосунків. Кращий підхід - використовувати файл docker-compose.yml для визначення всіх змінних середовища. Цей файл містить усі необхідні конфігурації для контейнерів, і ви можете застосувати їх однією командою під час запуску контейнерів. Щоб задати змінні середовища в контейнері за допомогою Docker Compose, потрібно явно визначити ці змінні в конфігурації сервісу.
Є два способи задати змінні середовища Docker за допомогою Docker Compose:
1. Використання атрибута environment
У цьому способі ви безпосередньо визначаєте змінні середовища у файлі docker-compose.yml за допомогою атрибута environment. Наприклад, у нас є Node-застосунок, який працює з базою даних MongoDB:
Файл Docker compose:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- PORT=3000
- MONGO_URI=mongodb://mongo:27017/database_name
depends_on:
- mongo
mongo:
image: mongo:4.4
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
volumes:
mongo-data:
2. Використання файлу .env або атрибута env_file
У цьому способі ви зберігаєте змінні середовища Docker в окремому файлі .env і посилаєтеся на цей файл у файлі docker-compose.yml.
Ось файл .env:
PORT=3000
MONGO_URI=mongodb://mongo:27017/database_name
Файл Docker compose:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
env_file:
- .env
depends_on:
- mongo
mongo:
image: mongo:4.4
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
volumes:
mongo-data:
Використання файлу .env забезпечує гнучкість і зручність: ви можете використовувати той самий файл із командою docker run --env-file ... або спільно використовувати його в кількох сервісах Docker Compose без дублювання довгих розділів зі змінними середовища у вашій YAML-конфігурації.
Такий підхід дає змогу зберігати змінні середовища окремо від основного файлу конфігурації, що покращує організацію та безпеку. Не розміщуючи файл .env безпосередньо в кореневому каталозі, ви можете краще керувати конфіденційною інформацією.
Атрибут env_file також підтримує використання кількох файлів .env у межах Compose-застосунку. Шляхи до цих файлів .env, указані в атрибуті env_file, задаються відносно розташування вашого файлу docker-compose.yml.
3. Задання змінних середовища Docker за допомогою docker compose під час виконання
Docker compose дає змогу задавати змінні середовища Docker з командного рядка за допомогою параметра --env-file.
docker compose --env-file <environmental_variables_file> up
Тепер додайте нову тестову змінну середовища у файл .env.
MONGODB_PASSWORD=test
Запустіть застосунок і перегляньте налаштовані змінні середовища Docker.
4. Використання Docker Compose для задання одноразових змінних середовища Docker
Під час використання docker compose run для задання змінних середовища для одноразового запуску контейнера ви можете вказати ці змінні за допомогою параметрів -e або --env-file. Цей підхід подібний до docker run і дає змогу перевизначити або задати змінні середовища лише для цього конкретного екземпляра контейнера.
Наприклад, щоб змінити змінну DEBUG у контейнері вашого вебзастосунку, виконайте:
docker compose run -e DEBUG=0 web
Ця команда задає для змінної DEBUG значення 0 саме для сервісу/контейнера web під час цього запуску, адаптуючи середовище до поточних потреб цього виконання.
Які найкращі практики задання змінних середовища Docker?
Задання змінних середовища Docker передбачає кілька найкращих практик, що забезпечують безпеку, узгодженість і зручність супроводу:
- Використовуйте файл .env: зберігайте змінні середовища в окремому файлі .env. Це допомагає впорядкувати змінні для різних середовищ (розробка, тестування, продакшн). Обов'язково додайте файл .env до .gitignore, щоб конфіденційні дані не потрапили до системи контролю версій.
- Шифруйте конфіденційні дані: не зберігайте конфіденційну інформацію, як-от паролі та API-ключі, у відкритому вигляді. Натомість використовуйте шифрування для їх безпечного зберігання. Розшифровуйте ці змінні в застосунку, коли це потрібно.
- Уникайте змін під час виконання: не змінюйте змінні середовища в запущеному контейнері. Це забезпечує узгодженість між різними середовищами. Якщо зміни необхідні, зупиніть контейнер, внесіть зміни та запустіть новий екземпляр.
- Дотримуйтеся стандартних правил іменування: підтримуйте узгодженість, використовуючи стандартні правила іменування змінних середовища. Так простіше керувати ними й розуміти їхнє призначення.
- Регулярно переглядайте змінні: регулярно перевіряйте та оновлюйте змінні середовища Docker, щоб вони залишалися актуальними. Видаляйте або оновлюйте застарілі змінні, щоб зберігати зрозумілість і ефективність.
Висновок
У цьому гайді розглянуто важливість змінних середовища Docker для забезпечення узгодженої поведінки застосунків на різних платформах. Ми обговорили, як визначати ці змінні в Dockerfile та змінювати їх за допомогою команд CLI і Docker Compose. Дотримуючись найкращих практик, ви можете безпечно керувати конфіденційними даними, забезпечити узгоджені конфігурації за допомогою docker compose і підвищити ефективність розгортання.
BlueVPS.com.ua пропонує високопродуктивні VPS-рішення з доступністю на рівні хмари, забезпечуючи просте, масштабоване та налаштовуване середовище, ідеальне для розгортань Docker. Користуйтеся виділеними ресурсами та необмеженим трафіком, оптимізуючи ваші Docker-застосунки для високої продуктивності та безперешкодного масштабування.