如何使用 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 为准。
Compose 适合谁
全栈 / 后端开发者
本地 API + 数据库与团队一致,减少「我机器上能跑」的环境漂移。
想练运维命令的工程师
在 K8s 或云 PaaS 之前,用 up/down/logs/ps 熟悉容器生命周期。
教程与工作坊作者
一份 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,作为 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 建议。