Docker Compose入门指南:多容器编排实战
Docker Compose是Docker官方提供的多容器编排工具,通过一个YAML文件定义和管理多个容器的生命周期。相比手动使用docker run启动多个容器,Compose极大简化了开发和部署流程。
一、为什么需要Docker Compose
在实际项目中,一个应用通常包含多个服务:Web应用、数据库、缓存、消息队列等。如果用docker run逐个启动,需要手动管理网络、挂载卷、依赖顺序,非常繁琐。Docker Compose解决了这个问题:
- 一个文件定义所有服务
- 一键启动全部服务
- 服务间自动通过服务名通信
- 支持环境变量和配置覆盖
二、安装Docker Compose
Linux上单独安装:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装:
docker-compose --version
注意:Docker Desktop已内置Compose插件,无需单独安装。
三、第一个docker-compose.yml
创建项目目录并编写docker-compose.yml:
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
depends_on:
- app
app:
build: .
environment:
- DB_HOST=db
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: your_password
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
四、常用命令
启动所有服务:
docker-compose up -d
# -d 后台运行
查看服务状态:
docker-compose ps
查看日志:
docker-compose logs -f app
停止并删除容器:
docker-compose down
# -v 同时删除数据卷
重新构建:
docker-compose build
docker-compose up -d --build
进入容器:
docker-compose exec db bash
五、核心概念详解
1. services段
定义各个服务(容器),每个服务对应一个容器。
2. image vs build
- image:直接使用已有镜像
- build:从Dockerfile构建镜像
3. ports与expose
- ports:映射到宿主机端口,外部可访问
- expose:仅服务间内部访问
4. depends_on
控制启动顺序,但不等待服务完全就绪(只等待容器启动)。
5. volumes
命名卷持久化数据,容器删除后数据保留。
6. environment
设置环境变量,也可用.env文件自动加载。
六、实际项目示例
以一个Node.js + Redis应用为例:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
restart: always
redis:
image: redis:alpine
restart: always
七、最佳实践
1. 不要在生产环境用latest标签,锁定具体版本
2. 用.env文件管理敏感配置,不提交到Git
3. 开发和生产用不同compose文件覆盖配置
4. 合理使用restart策略(always/unless-stopped)
5. 用docker-compose down -v清理测试环境
总结
Docker Compose让多容器应用的管理变得简单。掌握services、volumes、networks三个核心概念和up/down/logs三个常用命令,就能应对大多数开发场景。生产环境可进一步扩展到Swarm或Kubernetes。
- 点赞
- 收藏
- 关注作者
评论(0)