一、Docker Compose是什么?为什么你需要它?
如果你是Docker的新手,可能已经体验过用docker run启动单个容器的快乐。但现实中的项目往往需要多个容器协作:比如一个Web应用需要数据库+后端服务+前端页面,甚至还要挂载日志和配置文件。手动管理这些容器就像同时玩五个魔方——复杂又容易出错!
Docker Compose 就是来解决这个问题的!它通过一个简单的YAML配置文件(docker-compose.yml),帮你一键启动、停止、重建整个应用栈。
它的核心思想是:“用代码定义环境”,让开发、测试、生产环境保持一致,告别“在我机器上能跑”的尴尬!
二、核心概念:5分钟搞懂配置文件
一个典型的docker-compose.yml长这样:
version: "3.8" # 版本号(不同版本支持的功能不同)
services: # 定义所有需要启动的容器
web: # 服务名称(自定义)
image: nginx:latest # 使用的镜像
ports:
- "80:80" # 端口映射(主机:容器)
volumes:
- ./html:/usr/share/nginx/html # 挂载本地目录到容器
depends_on: # 依赖关系
- db
db:
image: mysql:5.7
environment: # 环境变量
MYSQL_ROOT_PASSWORD: my-secret-pw
volumes:
- db_data:/var/lib/mysql # 使用命名卷持久化数据
volumes: # 声明卷(数据持久化的关键!)
db_data:
关键词解释:
- services:每个服务对应一个容器,可以设置镜像、端口、环境变量等。
- volumes:数据卷,用于持久化存储(比如数据库文件)。
- networks:自定义网络,让容器间通过服务名通信(默认会自动创建一个)!
三、常用命令:记住这5个就够了
# 启动所有服务(后台运行加 -d)
docker-compose up -d
# 停止并删除所有容器、网络
docker-compose down
# 查看运行中的服务状态
docker-compose ps
# 重启某个服务(比如修改了web服务的配置)
docker-compose restart web
# 查看服务日志(实时跟踪日志用 -f)
docker-compose logs -f db
四、隐藏特性:让开发效率翻倍的小技巧
1. 环境变量动态配置
在docker-compose.yml中使用${VARIABLE},结合.env文件实现多环境配置:
# .env 文件(敏感信息别提交到Git!)
DB_PASSWORD=supersecret
# docker-compose.yml
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
2. 健康检查(Health Check)
确保服务完全启动后再连接依赖项:
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
3. 扩展配置(extends)
复用通用配置,避免重复代码:
# 公共配置
services:
base:
image: alpine
volumes: ["./data:/data"]
app1:
extends: base
command: ping docker.com
app2:
extends: base
command: tail -f /dev/null
五、新玩法:开发者的骚操作
1. 一键搭建本地开发环境
用Compose整合你的IDE、数据库、Mock服务:
services:
ide:
image: codercom/code-server # 网页版VS Code
ports: ["8080:8080"]
mock-api:
image: mockoon/cli
volumes: ["./mock-data.json:/data/mock.json"]
redis:
image: redis:alpine
2. 与CI/CD流水线结合
在GitLab CI或GitHub Actions中,用Compose启动测试环境:
# .gitlab-ci.yml 示例
test-job:
script:
- docker-compose up -d
- run-tests.sh
- docker-compose down
3. 模拟微服务网络
用自定义网络隔离服务,测试服务发现和负载均衡:
services:
app:
networks:
- frontend
- backend
networks:
frontend:
backend:
六、总结:你的下一步行动
Docker Compose不仅是容器编排工具,更是开发者的瑞士军刀。它让复杂环境的管理变得简单、可重复。建议从一个小项目开始实践,比如部署一个WordPress博客(包含MySQL和Web服务器),逐步探索更多高级功能!
你在使用Compose时遇到过哪些坑?欢迎评论区分享~~~