CodeGym /Các khóa học /Docker SELF /Biến môi trường trong Docker Compose

Biến môi trường trong Docker Compose

Docker SELF
Mức độ , Bài học
Có sẵn

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_VERSIONHOST_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.

Yaml

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:

.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_USERDB_PASSWORD được lấy từ tệp .env.

Yaml

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:

Terminal

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.

Terminal

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ụ:

Yaml

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:

.env

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:

Yaml

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:

Terminal

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.env.prod.

File .env.dev:

.env

NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword

File .env.prod:

.env

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:

Yaml

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:

Terminal

docker compose --env-file .env.dev up

Chạy Docker Compose cho sản xuất:

Terminal

docker compose --env-file .env.prod up
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION