Biến môi trường, .env trong Docker và nguyên tắc 12-factor
21/07/2026
Nguyên tắc thứ ba của 12-factor app nói rằng cấu hình phải nằm trong môi trường, không phải trong code. Docker và biến môi trường là cách hiện thực điều này.
Vì sao tách cấu hình khỏi code?
- Cùng một image chạy được ở dev, staging, prod — chỉ đổi biến môi trường
- Không phải build lại image khi đổi URL database hay bật/tắt tính năng
- Tránh commit secret vào git
Các cách truyền biến vào container
# từng biến
docker run -e DB_URL=... -e DB_USER=... app
# từ file .env
docker run --env-file .env app
# trong compose
services:
app:
env_file: .env
.env KHÔNG phải nơi cất secret production
File .env tiện cho local, nhưng ở production nên dùng secret manager (Docker secrets, Vault, secret của nền tảng như Cloudflare/Railway). Luôn thêm .env vào .gitignore và commit .env.example làm mẫu không chứa giá trị thật.
Bẫy thường gặp
- Biến trong Dockerfile bằng
ENVnằm trong image — đừng đặt secret ở đây - Giá trị có khoảng trắng/ký tự đặc biệt cần đặt trong ngoặc kép trong file .env
- Biến truyền lúc build (
ARG) khác biến lúc chạy (ENV) — đừng nhầm
👉 Dùng thử công cụ liên quan trên dev-hub: YAML ↔ Properties — chạy hoàn toàn trong trình duyệt, không gửi dữ liệu lên server.