Appearance
Environment Variable
Environment variable adalah nilai konfigurasi yang tersedia untuk process aplikasi saat container berjalan. Contohnya password database, nama database, URL service, atau application mode.
Dengan environment variable, satu image bisa digunakan di beberapa environment tanpa mengubah atau membuat ulang image.
Memberikan environment variable saat menjalankan container
Format command:
sh
docker run -d --name <nama-container> -e <NAMA_VARIABLE>=<nilai> <image:tag>Contoh:
sh
docker run -d --name db \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=app \
postgres:16Option -e menambahkan environment variable ke dalam container. Untuk menambahkan beberapa variable, gunakan -e beberapa kali.
Image PostgreSQL resmi membaca POSTGRES_PASSWORD dan POSTGRES_DB saat first start. Setiap image memiliki aturan sendiri tentang nama variable yang didukung. Baca dokumentasi image yang digunakan.
Untuk melihat environment variable yang tersedia di dalam container db, pastikan container tersebut masih running. Command berikut berguna untuk debugging local:
sh
docker exec db envOutput command ini dapat berisi password atau secret. Jangan membagikan output-nya atau menjalankan cara ini untuk memeriksa secret di environment production.
Jangan menyimpan secret di Dockerfile
Jangan menaruh password atau secret di dalam Dockerfile:
dockerfile
ENV PASSWORD=secretDockerfile menjadi bagian dari source code dan image. Secret yang ditulis di sana bisa ikut tersimpan di repository, image history, dan container yang dibuat dari image tersebut.
Untuk local development, gunakan environment variable saat docker run atau file .env melalui Docker Compose. Untuk production, gunakan secret manager yang disediakan platform kamu.
Environment variable di Compose
Di Docker Compose, environment variable ditulis pada bagian environment:
yaml
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: appNilai juga bisa diambil dari file .env. Saat membaca compose.yaml, Compose mengganti ${POSTGRES_PASSWORD} dengan nilai POSTGRES_PASSWORD dari file tersebut:
dotenv
POSTGRES_PASSWORD=secretyaml
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}Simpan file .env yang berisi secret di .gitignore. Jangan commit secret production ke Git.
Pada lesson berikutnya, konsep environment variable ini akan digunakan bersama Docker Compose.