Twelve-Factor App – Nguyên tắc số 3: Config
- Không nên lưu cấu hình (config) trực tiếp trong code.
- Cấu hình nên được tách riêng và sử dụng qua biến môi trường (Environment Variables).
- Ví dụ: API Key sẽ khác nhau giữa
dev,staging,production.
2 Cách sử dụng Environment Variables trong Docker
| Cách dùng | Lệnh hoặc chỉ dẫn | Ghi chú |
|---|---|---|
| Trong Dockerfile | ENV KEY=value | Thiết lập giá trị mặc định |
| Khi chạy container | --env KEY=value | Ghi đè giá trị mặc định |
Ví dụ Dockerfile với ENV
FROM node:12
LABEL org.label-schema.version="v2"
ENV NODE_ENV=development
ENV PORT=3000
WORKDIR /var/node
COPY ./src /var/node
RUN npm install
EXPOSE $PORT
CMD ["npm", "start"]
$PORTsẽ được thay thế bằng giá trị của biến môi trường tại thời điểm container chạy.
Build image
docker image build -t linuxacademy/weather-app:v2 .
Chạy container – Dev
docker container run -d \
--name weather-dev \
-p 8082:3001 \
--env PORT=3001 \
linuxacademy/weather-app:v2
NODE_ENVvẫn giữ mặc định làdevelopment- Mapping:
localhost:8082 → container:3001
Inspect container để kiểm tra env
docker container inspect weather-dev
Xem Env section để xác minh giá trị của NODE_ENV và PORT.
Chạy container – Production
docker container run -d \
--name weather-app2 \
-p 8083:3001 \
--env PORT=3001 \
--env NODE_ENV=production \
linuxacademy/weather-app:v2
Kiểm tra log container
docker container logs weather-app2
Xem ứng dụng đang chạy ở cổng nào, sẽ in ra:
Application listening on port 3001
Chạy container khác (default port)
docker container run -d \
--name weather-prod \
--env NODE_ENV=production \
linuxacademy/weather-app:v2
Không thay đổi PORT → Sẽ dùng mặc định là 3000.
Tổng kết nội dung bài học
- Tách biệt config khỏi code → đúng nguyên tắc twelve-factor app
- Thiết lập biến môi trường bằng
ENVtrong Dockerfile - Ghi đè
ENVbằng-envkhi chạy container - Dùng
inspect,logs, vàcurlđể kiểm tra container hoạt động đúng