开篇导读
你是否有过这样的经历?
- 启动一个项目,数据库、Redis、Web 服务得一个个敲 docker run?
- 想让别人复现你的开发环境,却得发一堆复杂的启动命令?
- 明明都是容器,为什么不能“一键启动”所有服务?
今天这讲,就来介绍 Docker 世界中多容器协同编排的“黄金搭档”——Docker Compose。
学会之后,你将告别复杂的 docker run 命令,实现一键构建、一键启动、集中管理!
一、什么是 Docker Compose?
Docker Compose 是官方推出的多容器管理工具,通过一个 docker-compose.yml 文件:
- 描述所有服务(如 web、db、redis)
- 设置依赖关系、网络、卷、环境变量等
- 一条命令,自动完成构建和运行
Compose 让你的项目变得:
简洁
可复用
易于维护
二、典型结构:docker-compose.yml 示例
下面是一个经典的 Web 项目结构:
version: '3.8'
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
redis:
image: redis:alpine
ports:
- "6379:6379"
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: testdb
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
文件解构说明:
字段 | 含义 |
services | 定义每个容器服务,如 web、redis |
image | 容器使用的镜像 |
ports | 宿主机与容器端口映射 |
volumes | 数据挂载 |
environment | 容器内的环境变量(如数据库密码) |
volumes: | 声明命名卷 |
三、核心命令详解
使用 Compose 非常简单,核心只需两步:
1 启动服务
docker-compose up
添加 -d 表示后台运行:
docker-compose up -d
2 停止服务
docker-compose down
这将停止并移除容器、网络、卷。
3 构建服务(使用 Dockerfile 时)
docker-compose build
四、常见场景实战演练
前后端分离项目统一部署
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
backend:
build: ./backend
ports:
- "8080:8080"
通过构建不同目录下的 Dockerfile,一键启动完整环境。
集成测试环境(CI/CD)
Compose 特别适合本地搭建与云端 CI 环境的隔离测试系统。只需提供一个 docker-compose.yml,即可在任意机器还原完整服务。
开发场景:文件热更新 + 端口暴露
使用 volumes 将本地代码映射进容器,支持热更新,提升开发效率。
volumes:
- ./src:/app/src
五、Compose VS Kubernetes
虽然 Kubernetes 是容器编排的“王者”,但在下列场景中,Docker Compose 更加合适:
对比项 | Docker Compose | Kubernetes |
学习成本 | 低,易上手 | 高,需要掌握 YAML + API |
配置复杂度 | 简洁,一文件描述 | 多对象、多资源 |
适用场景 | 本地开发,测试环境 | 云原生部署,生产环境 |
是否支持集群 | 单机为主 | 原生支持多节点部署 |
总结一句话:Compose 适合开发,K8s 适合生产。
本讲总结
- Docker Compose 是开发者不可或缺的编排工具;
- 通过 YAML 文件集中定义服务、端口、网络、卷等;
- 一键启动、统一管理,极大提升开发部署效率;
- 是从 Docker 走向 Kubernetes 的重要桥梁!