如何使用Docker Compose编排多个容器?
# Docker Compose 多容器编排|极简速通(一看就会、直接能用)
我给你**最实用、最通用、最不容易出错**的一套流程,不用复杂概念,照着写就能跑起来。
---
# 一、核心一句话
**Docker Compose = 用一个 YAML 文件,一键启动/停止/管理多个容器**
比如:Nginx + MySQL + Redis + SpringBoot 一起启动。
---
# 二、3 步搞定多容器编排
## 1. 创建文件
在项目文件夹下新建:
```
docker-compose.yml
```
## 2. 编写配置(复制就能用)
下面是**最标准模板**:Web + Redis + MySQL 三容器联动
```yaml
version: '3.8'
services:
# 容器1:Web服务(你的项目)
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- redis
- mysql
restart: always
# 容器2:Redis
redis:
image: redis:alpine
restart: always
# 容器3:MySQL
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: testdb
volumes:
- mysql-data:/var/lib/mysql
restart: always
# 数据卷(持久化 MySQL 数据)
volumes:
mysql-data:
```
## 3. 一键启动
```bash
docker-compose up -d
```
---
# 三、最常用 5 条指令(背会就够)
```bash
# 后台启动所有容器
docker-compose up -d
# 停止所有容器(不删除数据)
docker-compose stop
# 停止并删除容器、网络
docker-compose down
# 查看日志
docker-compose logs -f
# 重启所有服务
docker-compose restart
```
---
# 四、YAML 里关键字的意思(一看就懂)
```yaml
version: '3.8' # 版本号
services: # 所有容器写在这里
容器名: # 自定义,如 web mysql redis
image: 镜像名 # 使用什么镜像
ports: # 端口映射 宿主机:容器
- "80:80"
environment: # 环境变量(密码、库名等)
volumes: # 目录挂载(持久化)
depends_on: # 依赖关系,先启动谁
restart: always # 崩溃自动重启
```
---
# 五、容器之间怎么互相访问?
**重点:容器名 = 域名**
比如:
- web 容器要连 MySQL
- 不要写 `127.0.0.1`
- 直接写容器名 **mysql**
示例连接地址:
```
jdbc:mysql://mysql:3306/testdb
```
---
# 六、最常用组合模板(直接复制)
## 1)Nginx + PHP + MySQL
```yaml
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/var/www/html
depends_on:
- php
php:
image: php:fpm-alpine
volumes:
- ./html:/var/www/html
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: root
```
## 2)Vue/React + Nginx
```yaml
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./dist:/usr/share/nginx/html
```
---
# 七、你只要告诉我 3 个信息,我能直接给你生成可运行的 docker-compose.yml
1. 你要启动哪些容器?(如 MySQL + Redis + SpringBoot)
2. 端口分别是什么?
3. 需不需要挂载目录持久化?

