compose.yml 的基本結構docker run 指令改寫成 Compose前面使用 Docker 建立 PostgreSQL 時,我們輸入過這樣的指令:
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=mydb -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres
雖然一行指令就可以建立 PostgreSQL,但隨著設定越來越多,指令也會越來越長。
如果之後還要加入:
PostgreSQL
pgAdmin
Node.js
每個服務都要輸入不同的 docker run,管理起來就會變得比較麻煩。
這時候就可以使用 Docker Compose。
Docker Compose 可以把 Container 的設定寫在一個 YAML 設定檔中。
現在常見的檔案名稱是:
compose.yml
原本寫在 docker run 裡面的:
Image
Container Name
Port
Environment
Volume
都可以整理到 compose.yml 中。
可以簡單理解成:
原本
docker run + 很多參數
↓
Docker Compose
↓
compose.yml
這樣之後就不需要每次重新輸入一大串指令。
先建立一個:
compose.yml
接著寫入:
services:
postgres:
image: postgres
container_name: my-postgres
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: 123456
POSTGRES_DB: mydb
ports:
- "5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
這份設定其實就是把之前的 docker run 指令拆開來寫。
首先:
services:
代表要管理的服務。
接著:
postgres:
是我們替這個服務設定的名稱。
使用:
image: postgres
指定 PostgreSQL Image。
Container 名稱則是:
container_name: my-postgres
環境變數:
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: 123456
POSTGRES_DB: mydb
Port Mapping:
ports:
- "5432:5432"
Volume:
volumes:
- postgres-data:/var/lib/postgresql/data
可以發現這些內容其實前面都已經學過,只是現在改成 YAML 的方式集中管理。
在 compose.yml 所在的資料夾開啟終端機,輸入:
docker compose up -d
其中:
docker compose up → 建立並啟動服務
-d → 在背景執行
完成後可以使用:
docker ps
查看 PostgreSQL Container 是否正常執行。
也可以使用:
docker compose ps
查看目前 Compose 管理的服務。
如果想停止服務,可以輸入:
docker compose down
這會停止並移除 Compose 建立的 Container 與 Network。
不過一般情況下,已建立的 Named Volume 不會因為單純執行 docker compose down 就一起刪除。
如果使用:
docker compose down -v
才會連 Compose 管理的 Volume 一起移除,因此操作資料庫時要特別注意。
兩種方式都可以建立 Container。
docker run
↓
適合快速建立單一 Container
Docker Compose
↓
適合管理多個服務與較複雜的設定
目前只有 PostgreSQL 時差異可能還不明顯,但之後加入 pgAdmin、Node.js 後,Docker Compose 的方便之處就會更加明顯。
compose.yml → ✅ 確認終端機位於正確資料夾docker compose up 後服務沒有啟動 → ✅ 使用 docker compose logs 查看錯誤docker compose down -v → ✅ 刪除 Volume 前先確認資料是否需要保留compose.yml
docker compose up -d 啟動服務docker compose ps 查看狀態docker compose down 停止服務docker run 與 Docker Compose 的差別今天第一次接觸 Docker Compose,原本以為又要學一套新的 Docker 操作方式,但實際寫過 compose.yml 後,發現裡面的內容幾乎都是前面已經學過的 Image、Port、Volume 和 Environment,只是換成設定檔的方式整理起來。
相比之前很長的 docker run 指令,我覺得 Compose 看起來清楚很多,而且之後只要使用 docker compose up -d 就可以把設定好的服務啟動。
目前 Compose 裡面只有 PostgreSQL,還看不太出管理多個 Container 的優勢。下一步會把 pgAdmin 也加入 compose.yml,嘗試一次啟動 PostgreSQL 和 pgAdmin,讓整個資料庫開發環境更完整。