如何使用 Docker Compose:安裝 Docker、撰寫 docker-compose.yml、啟動日誌與首個 Web+資料庫棧
安裝 Compose,建立 Web+Postgres 棧,用 up、down、logs 管理本機多容器。
本機要同時跑 Web 服務與 PostgreSQL,又不想在主機上裝一堆版本衝突的依賴。Docker Compose 用一份 docker-compose.yml 描述多容器應用,一條指令啟動、停止與看日誌。
搜尋 Docker Compose 安裝 docker-compose.yml up down 日誌 Web 資料庫 的人,通常要完成:裝好 Docker 與 Compose、寫可跑的 compose、用 up/down 管理、用 logs 除錯,並跑通 Web + 資料庫範例。以 docs.docker.com 為準。
Compose 適合誰
全端 / 後端開發者
本機 API + 資料庫與團隊一致,減少環境漂移。
想練維運指令的工程師
在 K8s 或雲 PaaS 前,用 up/down/logs 熟悉容器生命週期。
教學與工作坊講師
一份 compose 啟動 nginx + Postgres;學員可用 down -v 重置。
安裝 Docker 與 Compose 外掛
- 1
macOS / Windows: Docker Desktop
Download from
https://docs.docker.com/desktop/(Docker Hub download links redirect there). Install, start Docker Desktop, wait until the engine reports running. Compose V2 ships asdocker compose. - 2
Linux: Docker Engine + compose plugin
Follow
https://docs.docker.com/engine/install/for your distro, then install the Compose plugin perhttps://docs.docker.com/compose/install/linux/(package name oftendocker-compose-plugin). - 3
Verify CLI
Run
docker --versionanddocker compose version. If only hyphenateddocker-composeexists, prefer upgrading to the plugin; legacy binary behavior differs slightly. - 4
Permissions (Linux)
Without sudo, add your user to the
dockergroup per official post-install steps, then log out/in. Do not chmod/var/run/docker.sockto world-writable.
撰寫首個 docker-compose.yml(Web + PostgreSQL)
Create a project folder with docker-compose.yml (filename also accepted: compose.yaml). Example: nginx on port 8080 and PostgreSQL 16 with a named volume:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
depends_on:
- db
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: devpass
POSTGRES_DB: appdb
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:Put a simple html/index.html on the host. Never commit real passwords; use .env for local secrets and add .env to .gitignore (see Docker docs on env files).
啟動、停止與查看日誌
| Command | Action | When |
|---|---|---|
docker compose up -d | Start detached | First bring-up |
docker compose ps | Status / ports | Confirm mapping |
docker compose logs -f web | Follow logs | Debug startup |
docker compose stop | Stop containers | Pause without removing |
docker compose down | Remove containers/network | Clean shutdown |
docker compose pull | Refresh images | Before upgrades |
驗證首個 Web + 資料庫棧
- 1
HTTP
Open
http://localhost:8080— nginx should serve yourindex.html. - 2
Database
docker compose exec db psql -U app -d appdb -c '\dt'checks Postgres inside the container. - 3
Rebuild after edits
If you add a
build:section later, usedocker compose up -d --build.
Compose orchestrates containers on one Docker host; it is not a cloud substitute. Backups, TLS, and scaling live in platform-specific docs.
本機棧跑通後,若要遠端結對畫架構或語音對齊,可從 wbroom 首頁 開瀏覽器房間,見 建立與加入房間。
還想核對的問題
Compose V2 和舊的 docker-compose 指令有什麼不同?
Docker Desktop 與現行 Linux 套件預設提供 docker compose(V2)。獨立的 docker-compose 是舊版;新教學以 docker compose version 為準。
docker compose down 會刪資料嗎?
PostgreSQL 使用 named volume 時,一般 down 不會刪 volume;down -v 才會清空開發用資料庫。
連接埠被占用怎麼辦?
修改 ports 對應的宿主埠,或用 lsof 查占用程序。
能生產環境直接照搬嗎?
本文為本機學習用;正式環境需密鑰管理、TLS、備份與 pin 映像版本。