
什么是 Docker Compose?
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 配置文件(docker-compose.yml),你可以在一个地方配置所有应用的服务、网络和卷,然后使用单个命令 docker compose up 启动所有内容。

docker run 与 docker-compose.yml
在使用 Docker 时,你通常从手动构建 docker run 命令开始。随着应用程序变得越来越复杂,这些命令变得难以管理。Docker Compose 提供了一种声明式替代方案。
docker run 命令
docker run -d \
--name postgres \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=mypassword \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-v postgres_data:/var/lib/postgresql/data \
--restart unless-stopped \
postgres:15
等效的 docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:15
container_name: postgres
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
postgres_data:
关键 Docker Compose 概念

服务(Services)
应用程序中的每个容器都被定义为一个服务。服务可以相互依赖、共享网络,并通过服务名称进行通信。
网络(Networks)
默认情况下,Compose 会为你的应用创建一个单一网络。所有服务可以使用服务名称作为主机名进行通信。你可以定义多个网络来隔离服务。
卷(Volumes)
命名卷(Named volumes)在容器生命周期之外持久化数据。绑定挂载(Bind mounts)将主机目录映射到容器中,用于开发。
环境变量(Environment Variables)
可以内联定义、从 .env 文件加载,或通过主机环境传递。

多服务应用示例
一个完整的 Web 应用栈:
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- app
app:
build: .
environment:
DATABASE_URL: postgresql://user:pass@db:5432/mydb
REDIS_URL: redis://redis:6379
depends_on:
- db
- redis
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: pass
volumes:
- db_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
db_data:
常用 docker run 标志及其 Compose 等效项
| docker run 标志 | Compose 键 |
|---|---|
| -d | (默认后台运行) |
| --name | container_name |
| -e VAR=val | environment: VAR: val |
| -p 80:80 | ports: - "80:80" |
| -v vol:/path | volumes: - vol:/path |
| --restart | restart: unless-stopped |
| --network | networks: |
| --link | depends_on: (改用服务名称) |
Docker Compose 命令
docker compose up -d # 后台启动所有服务
docker compose down # 停止并移除容器
docker compose logs -f # 跟踪服务日志
docker compose ps # 列出运行中的服务
docker compose exec app bash # 进入服务 shell
docker compose build # 重建服务镜像
docker compose pull # 拉取最新镜像
使用 Docker Run 到 Compose 转换器
我们的工具:
- 粘贴 docker run 命令 — 处理所有常见标志
- 生成 docker-compose.yml — 正确的 YAML 结构
- 多命令支持 — 将多个 run 命令转换为完整的 compose 文件
- 网络推断 — 根据链接的容器建议网络配置
- 复制 YAML — 准备好保存为 docker-compose.yml
在从手动 Docker 命令迁移到托管 Compose 工作流、记录现有容器配置或与队友共享服务配置时使用它。