这个问题问得非常好 👍
Docker Compose 是 Docker 里"从能跑一个容器 → 能跑一整套系统"的关键工具。
我按 人话 → 例子 → 怎么用 给你一次讲透。
一、Docker Compose 是什么?(一句话版)
Docker Compose = 用一个 yml 文件,定义并启动多个 Docker 容器
它解决的问题是:
-
不只跑一个容器
-
而是:
-
Web
-
API
-
数据库
-
Redis
-
MQ
👉 一整套服务,一条命令启动
-
二、docker compose.yml 是干嘛的?
docker compose.yml = 容器"编排说明书"
它告诉 Docker 三件事:
1️⃣ 有哪些服务(containers)
2️⃣ 每个服务怎么启动
3️⃣ 服务之间怎么连
三、没有 Compose 时你会怎样(痛苦版)
比如你要启动一个系统:
-
MySQL
-
Redis
-
Java 后端
-
Nginx
你得手敲:
docker run -d --name mysql -p 3306:3306 ...
docker run -d --name redis -p 6379:6379 ...
docker run -d --name backend ...
docker run -d --name nginx ...
❌ 参数多
❌ 顺序容易错
❌ 停止/重启麻烦
四、有 docker compose.yml 之后(爽版)
version: "3.9"
services:
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- mysql-data:/var/lib/mysql
redis:
image: redis:7
ports:
- "6379:6379"
backend:
image: my-backend:latest
depends_on:
- mysql
- redis
volumes:
mysql-data:
然后只需要一句:
docker compose up -d
🎉 全部跑起来
五、docker compose.yml 能做什么(核心能力)
1️⃣ 定义多个服务
services:
app:
db:
cache:
2️⃣ 定义端口映射
ports:
- "8080:8080"
3️⃣ 定义环境变量
environment:
SPRING_PROFILES_ACTIVE: dev
4️⃣ 定义数据持久化
volumes:
- ./data:/data
5️⃣ 定义启动顺序
depends_on:
- mysql
6️⃣ 定义网络(默认就有)
networks:
- backend-net
networks: - backend-net的作用是:
把这个容器加入到名为backend-net的 Docker 网络里
加入同一个 network 的容器:
-
可以 直接通过服务名互相访问
-
网络隔离更安全
-
端口不必暴露到宿主机
Docker 网络 = 容器的"虚拟局域网"
-
每个 network 都是一个独立的子网
-
容器在里面有:
-
私有 IP
-
内置 DNS
-
-
外界(宿主机 / 其他网络)默认访问不到
且Docker 在 network 里自带 DNS:
mysql → 172.20.0.3
backend → 172.20.0.4
六、怎么使用 docker compose.yml(实战步骤)
1️⃣ 准备文件
在项目目录创建:
docker-compose.yml
2️⃣ 启动服务
docker compose up
后台运行:
docker compose up -d
3️⃣ 查看状态
docker compose ps
4️⃣ 看日志
docker compose logs
指定服务:
docker compose logs mysql
5️⃣ 停止并删除容器
docker compose down
七、常见命令速查表
| 命令 | 作用 |
|---|---|
| docker compose up | 启动 |
| docker compose up -d | 后台启动 |
| docker compose down | 停止并删除 |
| docker compose restart | 重启 |
| docker compose ps | 查看状态 |
| docker compose logs | 查看日志 |
| docker compose exec app bash | 进容器 |
八、docker compose vs docker-compose(注意)
| 写法 | 说明 |
|---|---|
| docker compose | ✅ 新版(推荐) |
| docker-compose | ⚠️ 旧版 |
👉 新 Docker 已经内置 compose
九、一句话总结
docker compose.yml = 描述一整套系统的配置文件
docker compose = 按配置一键启动所有容器