如何使用 Docker Compose:安装 Docker、编写 docker-compose.yml、启动日志与首个 Web+数据库栈

装好 Docker 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 + 数据库示例。步骤以 Docker 官方文档 docs.docker.com 为准。

安装 Docker / Compose编写 compose 文件up · logs · 首个栈

Compose 适合谁

01

全栈 / 后端开发者

本地 API + 数据库与团队一致,减少「我机器上能跑」的环境漂移。

02

想练运维命令的工程师

在 K8s 或云 PaaS 之前,用 up/down/logs/ps 熟悉容器生命周期。

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,作为 CLI 插件)。独立的 docker-compose(带连字符)是旧版 Python 实现,仍可能在旧文档里出现;新教程以 docker compose 为准,用 docker compose version 确认。

数据会随 docker compose down 丢失吗?

若 PostgreSQL 使用 named volume(如 db_data),docker compose down 默认不会删除 volume,数据仍在。docker compose down -v 会删 volume,开发环境重置数据库时才用。

端口已被占用怎么办?

把 compose 里 ports 的宿主机端口改成空闲值,例如 8080:80;或用 docker compose ps / lsof -i :8080 查占用进程。

生产环境能直接照搬这份 compose 吗?

本文栈面向本地学习与冒烟测试:默认密码、无 TLS、无备份策略。生产应使用密钥管理、健康检查、资源限制与官方镜像 pin 版本,并参考 Docker 文档的 production 建议。

开始一场会议