6.1 Cơ bản về biến môi trường
Biến môi trường đóng vai trò quan trọng trong việc cấu hình ứng dụng, cho phép thay đổi hành vi và tham số của các dịch vụ một cách linh hoạt mà không cần chỉnh sửa mã nguồn. Docker Compose hỗ trợ việc sử dụng biến môi trường để cấu hình container, mang lại sự linh hoạt và tiện lợi trong việc quản lý cấu hình.
Một trong những cách tiện lợi nhất để quản lý biến môi trường là sử dụng các file .env
. Trong bài giảng này, chúng ta sẽ cùng nhau đi sâu vào cách sử dụng biến môi trường trong Docker Compose, bao gồm việc tạo và sử dụng các file .env
.
Cơ bản về biến môi trường trong Docker Compose
Biến môi trường có thể được sử dụng trong file compose.yaml
để tham số hóa các cấu hình. Các biến này có thể được định nghĩa trong file .env
, trực tiếp trong compose.yaml
, hoặc được truyền vào thông qua dòng lệnh.
Ví dụ sử dụng biến môi trường trong compose.yaml
:
Trong ví dụ này, các biến NGINX_VERSION
và HOST_PORT
được sử dụng, giá trị của chúng có thể được thiết lập trong file .env
hoặc thông qua dòng lệnh.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 Sử dụng tệp .env
1. Tạo tệp .env
Tệp .env
được đặt trong cùng thư mục với compose.yaml
, và chứa các cặp "key-value", định nghĩa giá trị các biến môi trường. Mỗi biến được trình bày trên một dòng riêng.
Ví dụ tệp .env
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Tích hợp tệp .env
với Docker Compose
Docker Compose tự động tải các biến từ tệp .env
nếu nó nằm trong cùng thư mục với compose.yaml
.
Ví dụ tệp compose.yaml
sử dụng các biến môi trường:
Trong ví dụ này, các biến NGINX_VERSION
, HOST_PORT
, DB_USER
và DB_PASSWORD
được lấy từ tệp .env
.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 Truyền biến
Truyền biến qua dòng lệnh
Bạn có thể truyền biến môi trường trực tiếp qua dòng lệnh bằng cách sử dụng lệnh export
trên các hệ thống giống Unix hoặc dùng tham số --env-file
trong Docker Compose.
Ví dụ sử dụng export
:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
Ví dụ sử dụng --env-file
:
Bạn có thể chỉ định một file biến môi trường thay thế bằng tham số --env-file
.
docker compose --env-file .env.dev up
Sử dụng biến môi trường tích hợp trong Docker Compose
Docker Compose hỗ trợ các biến môi trường tích hợp, như ${PWD}
, đại diện cho thư mục làm việc hiện tại.
Ví dụ:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 Ví dụ thực tế
Ví dụ thực tế ứng dụng biến môi trường:
Ví dụ 1: Cấu hình web server và cơ sở dữ liệu
Tạo file .env
với các tham số cho web server và cơ sở dữ liệu:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
Tạo file compose.yaml
, sử dụng những biến này:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Chạy Docker Compose:
docker compose up
Ví dụ 2: Phân chia môi trường cho phát triển và sản xuất
Tạo hai file .env
cho các môi trường khác nhau: .env.dev
và .env.prod
.
File .env.dev
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
File .env.prod
:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
Tạo file compose.yaml
, sử dụng các biến từ những file này:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Chạy Docker Compose cho phát triển:
docker compose --env-file .env.dev up
Chạy Docker Compose cho sản xuất:
docker compose --env-file .env.prod up
GO TO FULL VERSION