compose.yml 建立 PostgreSQLdocker compose up 啟動 PostgreSQLdocker compose down 關閉環境Day 21 認識了 Docker Compose,也知道它可以把原本很長的 docker run 指令整理到 compose.yml 中。
今天要實際建立一份完整的 PostgreSQL Compose 設定,並從頭啟動資料庫。
首先建立一個資料夾:
postgres-compose
在裡面建立:
compose.yml
最後的結構非常簡單:
postgres-compose
└── compose.yml
在 compose.yml 中加入:
services:
postgres:
image: postgres:17
container_name: my-postgres
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: 123456
POSTGRES_DB: schedule_db
ports:
- "5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
這份設定會建立一個 PostgreSQL Container,並同時設定帳號、密碼、Database、Port 與 Volume。
首先是:
services:
postgres:
services 用來定義 Compose 要管理的服務,而 postgres 是我們設定的服務名稱。
接著:
image: postgres:17
代表使用 PostgreSQL 17 的 Image。
Container 名稱:
container_name: my-postgres
環境變數則是:
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: 123456
POSTGRES_DB: schedule_db
這些就是 Day 15 學過的 PostgreSQL 初始化設定。
接著設定:
ports:
- "5432:5432"
代表:
我的電腦 5432
↓
Container 5432
↓
PostgreSQL
再加入 Volume:
volumes:
- postgres-data:/var/lib/postgresql/data
並在最下面定義:
volumes:
postgres-data:
這樣 PostgreSQL 的資料就不會只存在 Container 裡面。
完成 compose.yml 後,在相同資料夾開啟終端機:
docker compose up -d
Docker Compose 會依照設定檔自動完成需要的建立與啟動工作。
接著使用:
docker compose ps
查看服務狀態。
如果看到 PostgreSQL 顯示:
Up
就代表啟動成功。
如果 PostgreSQL 沒有正常啟動,可以使用:
docker compose logs postgres
查看執行紀錄。
也可以持續查看新的 Log:
docker compose logs -f postgres
如果看到類似:
database system is ready to accept connections
就代表 PostgreSQL 已經準備好接受連線。
要停止持續顯示 Logs,可以按:
Ctrl + C
接著可以使用前面學過的 psql:
docker exec -it my-postgres psql -U myuser -d schedule_db
成功後會看到:
schedule_db=#
這代表使用 Compose 建立的 PostgreSQL 已經可以正常使用。
可以再輸入:
\conninfo
查看目前的資料庫連線資訊。
使用完畢後,可以輸入:
docker compose down
這會停止並移除 Container。
之後想再次建立環境,只要回到 compose.yml 所在的資料夾,再執行:
docker compose up -d
就可以重新啟動。
而我們使用的 Named Volume 會繼續保留,因此下次啟動時仍然可以繼續使用原本的 PostgreSQL 資料。
之前需要輸入:
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=schedule_db -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres:17
現在只需要:
docker compose up -d
真正的差別是複雜的設定已經被保存到:
compose.yml
之後不管重新建立幾次環境,都不需要重新輸入完整參數。
compose.yml 縮排錯誤 → ✅ YAML 要特別注意空格與階層docker compose logs postgres 查看原因compose.yml 的資料夾postgres-compose 資料夾compose.yml
docker compose up -d 啟動docker compose ps 確認狀態今天真正從頭使用 compose.yml 建立 PostgreSQL,比起之前直接輸入很長的 docker run 指令,Compose 的方式確實方便很多。
以前建立 Container 時,要自己記住帳號、密碼、Port、Volume 等參數,現在全部都可以直接寫在設定檔裡,只要一個 docker compose up -d 就能把 PostgreSQL 啟動。
做到這裡也發現前面學過的內容其實都慢慢串起來了,從 Image、Container、Port、Volume、環境變數到 PostgreSQL,現在都集中在同一份 Compose 設定裡。下一步就可以加入第二個服務 pgAdmin,看看 Docker Compose 同時管理多個 Container 時真正方便的地方。