如何使用 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 為準。

安裝 Docker / Compose撰寫 compose 檔up · logs · 首個棧

Compose 適合誰

01

全端 / 後端開發者

本機 API + 資料庫與團隊一致,減少環境漂移。

02

想練維運指令的工程師

在 K8s 或雲 PaaS 前,用 up/down/logs 熟悉容器生命週期。

03

教學與工作坊講師

一份 compose 啟動 nginx + Postgres;學員可用 down -v 重置。

安裝 Docker 與 Compose 外掛

  1. 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 as docker compose.

  2. 2

    Linux: Docker Engine + compose plugin

    Follow https://docs.docker.com/engine/install/ for your distro, then install the Compose plugin per https://docs.docker.com/compose/install/linux/ (package name often docker-compose-plugin).

  3. 3

    Verify CLI

    Run docker --version and docker compose version. If only hyphenated docker-compose exists, prefer upgrading to the plugin; legacy binary behavior differs slightly.

  4. 4

    Permissions (Linux)

    Without sudo, add your user to the docker group per official post-install steps, then log out/in. Do not chmod /var/run/docker.sock to 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).

啟動、停止與查看日誌

CommandActionWhen
docker compose up -dStart detachedFirst bring-up
docker compose psStatus / portsConfirm mapping
docker compose logs -f webFollow logsDebug startup
docker compose stopStop containersPause without removing
docker compose downRemove containers/networkClean shutdown
docker compose pullRefresh imagesBefore upgrades

驗證首個 Web + 資料庫棧

  1. 1

    HTTP

    Open http://localhost:8080 — nginx should serve your index.html.

  2. 2

    Database

    docker compose exec db psql -U app -d appdb -c '\dt' checks Postgres inside the container.

  3. 3

    Rebuild after edits

    If you add a build: section later, use docker 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 映像版本。

開始一場會議