CodeGym /Adesua ahorow /Docker SELF /Docker Compose 中的環境變量

Docker Compose 中的環境變量

Docker SELF
等級 16 , 課堂 0
開放

6.1 環境變數的基礎

環境變數在應用程序的配置中非常重要,因為它可以動態改變服務的行為和參數,而不用修改代碼。Docker Compose 支援使用環境變數配置容器,提供靈活性和方便的管理方式。

管理環境變數最方便的方法之一是使用 .env 文件。在這節課中,我們將詳細介紹如何在 Docker Compose 中使用環境變數,包括創建和使用 .env 文件的方法。

Docker Compose 中環境變數的基礎

可以在 compose.yaml 文件中使用環境變數來參數化配置。這些變數可以定義在 .env 文件中,也可以直接寫在 compose.yaml,或者通過命令行傳遞。

compose.yaml 中使用環境變數的範例:

在這個範例中,我們使用了 NGINX_VERSIONHOST_PORT 這些變數,這些變數的值可以在 .env 文件中設置,也可以通過命令行提供。

Yaml

version: '3.8'

services:
  web:
    image: nginx:${NGINX_VERSION}
    ports:
      - "${HOST_PORT}:80"

6.2 使用 .env 檔案

1. 建立 .env 檔案

檔案 .env 放置在與 compose.yaml 相同的目錄中,包含 "鍵-值" 對,用來定義環境變數的值。每個變數都寫在新的一行中。

.env 檔案的範例:

.env

NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret

2. 將 .env 檔案與 Docker Compose 整合

如果 .env 檔案位於與 compose.yaml 相同的目錄中,Docker Compose 會自動載入該檔案中的變數。

使用環境變數的 compose.yaml 檔案範例:

在這個範例中,變數 NGINX_VERSIONHOST_PORTDB_USERDB_PASSWORD 都來自 .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 傳遞變數

通過命令行傳遞變數

你可以通過命令行直接傳遞環境變數,可以在類 Unix 系統中使用 export 命令,或者在 Docker Compose 中使用參數 --env-file

使用 export 的例子:

Terminal

export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up

使用 --env-file 的例子:

你可以使用參數 --env-file 指定一個替代的環境變數檔案。

Terminal

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

在 Docker Compose 中使用內建的環境變數

Docker Compose 支援內建的環境變數,例如 ${PWD},它代表當前的工作目錄。

例子:

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    volumes:
      - ${PWD}/app:/app

6.4 實踐範例

環境變數的實踐範例:

範例 1: 配置 web 伺服器和資料庫

創建一個 .env 檔案,包含 web 伺服器和資料庫的參數:

.env

NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword

創建一個 compose.yaml 檔案,使用這些變數:

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:

啟動 Docker Compose:

Terminal

docker compose up

範例 2: 區分開發和生產環境

創建兩個 .env 檔案分別用於不同的環境:.env.dev.env.prod

檔案 .env.dev:

.env

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

檔案 .env.prod:

.env

NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword

創建一個 compose.yaml 檔案,從這些檔案中使用變數:

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:

啟動開發環境的 Docker Compose:

Terminal

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

啟動生產環境的 Docker Compose:

Terminal

docker compose --env-file .env.prod up
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION