HoRain云--DockerCompose高效容器管理全指南
·

🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录
🐳 Docker Compose - 高效管理容器化应用的利器

根据搜索结果,我为您整理了一份完整的 Docker Compose 高效管理容器化应用指南。
🐳 Docker Compose - 高效管理容器化应用的利器
一、什么是 Docker Compose?
核心概念
| 特性 | 说明 |
|---|---|
| 定义 | Docker 官方提供的多容器应用编排工具 |
| 配置文件 | docker-compose.yml(YAML 格式) |
| 核心优势 | 一键启动/停止多个关联容器 |
| 适用场景 | 开发环境、测试环境、中小型生产环境 |
| 当前版本 | Docker Compose V2(作为 Docker CLI 插件) |
为什么需要 Docker Compose?
传统方式的问题:
# ❌ 需要执行多条命令,容易出错
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 mysql:8
docker run --name web --link mysql -p 80:80 nginx
docker run --name redis -p 6379:6379 redis
Docker Compose 方式:
# ✅ 一个文件,一条命令
# docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: "123"
ports:
- "3306:3306"
web:
image: nginx
ports:
- "80:80"
depends_on:
- mysql
redis:
image: redis
ports:
- "6379:6379"
# 一条命令启动所有服务
docker compose up -d
二、安装 Docker Compose
📦 Linux 系统(Ubuntu/Debian)
# 方法1:作为 Docker CLI 插件安装(推荐 V2 版本)
sudo apt update
sudo apt install docker-compose-plugin
# 方法2: standalone 独立安装
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker compose version
# 或
docker-compose version
📦 macOS 系统
# 使用 Homebrew 安装
brew install docker-compose
# 或使用 Docker Desktop(已包含 Compose)
# 下载:https://www.docker.com/products/docker-desktop/
📦 Windows 系统
# 推荐:安装 Docker Desktop for Windows
# 下载地址:https://www.docker.com/products/docker-desktop/
# Docker Desktop 已内置 Docker Compose
# 验证安装
docker compose version
✅ 验证安装成功
# 查看版本
docker compose version
# 输出示例
Docker Compose version v2.24.0
三、docker-compose.yml 文件详解
完整结构示例
version: '3.8'
# 服务定义
services:
# 服务1:Web 应用
web:
build: . # 从 Dockerfile 构建
# image: nginx:latest # 或使用现成镜像
container_name: my-web # 容器名称
ports:
- "80:80" # 端口映射
- "443:443"
volumes:
- ./html:/usr/share/nginx/html # 挂载卷
- nginx-logs:/var/log/nginx # 命名卷
environment:
- ENV=production
- DB_HOST=db
env_file:
- .env # 环境变量文件
depends_on:
- db # 依赖服务
- redis
networks:
- app-network
restart: unless-stopped # 重启策略
healthcheck: # 健康检查
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
# 服务2:数据库
db:
image: mysql:8.0
container_name: my-db
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: myapp
volumes:
- db-data:/var/lib/mysql # 数据持久化
networks:
- app-network
restart: always
# 服务3:缓存
redis:
image: redis:alpine
container_name: my-redis
ports:
- "6379:6379"
networks:
- app-network
# 网络定义
networks:
app-network:
driver: bridge
# 数据卷定义
volumes:
db-data:
nginx-logs:
核心配置项说明
| 配置项 | 说明 | 示例 |
|---|---|---|
| build | 从 Dockerfile 构建镜像 | build: . 或 build: ./dir |
| image | 使用现成镜像 | image: nginx:latest |
| container_name | 自定义容器名 | container_name: my-app |
| ports | 端口映射 | "8080:80" |
| volumes | 挂载数据卷 | ./data:/app/data |
| environment | 环境变量 | - KEY=value |
| env_file | 环境变量文件 | .env |
| depends_on | 服务依赖 | depends_on: [db] |
| networks | 网络连接 | app-network |
| restart | 重启策略 | always / unless-stopped |
| healthcheck | 健康检查 | 见上方示例 |
| command | 覆盖默认命令 | command: npm start |
| working_dir | 工作目录 | working_dir: /app |
四、常用命令速查表
| 命令 | 说明 | 示例 |
|---|---|---|
| 启动服务 | 创建并启动所有容器 | docker compose up |
| 后台启动 | 守护进程模式运行 | docker compose up -d |
| 停止服务 | 停止并移除容器 | docker compose down |
| 停止保留卷 | 停止但保留数据卷 | docker compose down -v |
| 查看状态 | 显示容器运行状态 | docker compose ps |
| 查看日志 | 查看服务日志 | docker compose logs |
| 实时日志 | 跟踪日志输出 | docker compose logs -f |
| 重启服务 | 重启所有服务 | docker compose restart |
| 重建服务 | 强制重新构建 | docker compose up -d --build |
| 执行命令 | 在容器中执行命令 | docker compose exec web bash |
| 查看配置 | 验证配置文件 | docker compose config |
| 暂停服务 | 暂停运行中的服务 | docker compose pause |
| 恢复服务 | 恢复暂停的服务 | docker compose unpause |
| 拉取镜像 | 下载所有镜像 | docker compose pull |
| 查看拓扑 | 显示服务依赖关系 | docker compose top |
五、实战案例
案例 1:WordPress + MySQL
version: '3.8'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wp-data:/var/www/html
depends_on:
- db
networks:
- wp-network
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- db-data:/var/lib/mysql
networks:
- wp-network
volumes:
wp-data:
db-data:
networks:
wp-network:
driver: bridge
启动命令:
docker compose up -d
# 访问 http://localhost:8080
案例 2:前后端分离应用
version: '3.8'
services:
# 前端
frontend:
build: ./frontend
ports:
- "3000:3000"
environment:
- REACT_APP_API_URL=http://backend:8000
depends_on:
- backend
networks:
- app-network
# 后端
backend:
build: ./backend
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
networks:
- app-network
# 数据库
db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- app-network
# 缓存
redis:
image: redis:alpine
volumes:
- redis-data:/data
networks:
- app-network
volumes:
postgres-data:
redis-data:
networks:
app-network:
driver: bridge
案例 3:微服务架构
version: '3.8'
services:
# API 网关
gateway:
image: kong:latest
ports:
- "8000:8000"
- "8443:8443"
environment:
- KONG_DATABASE=off
- KONG_DECLARATIVE_CONFIG=/kong.yml
volumes:
- ./kong.yml:/kong.yml
networks:
- microservices
depends_on:
- user-service
- order-service
- product-service
# 用户服务
user-service:
build: ./services/user
environment:
- SERVICE_PORT=8001
- DB_HOST=user-db
networks:
- microservices
- user-network
# 订单服务
order-service:
build: ./services/order
environment:
- SERVICE_PORT=8002
networks:
- microservices
# 产品服务
product-service:
build: ./services/product
environment:
- SERVICE_PORT=8003
networks:
- microservices
# 用户数据库
user-db:
image: mongo:6
volumes:
- user-db-data:/data/db
networks:
- user-network
# 消息队列
rabbitmq:
image: rabbitmq:3-management
ports:
- "15672:15672"
networks:
- microservices
networks:
microservices:
driver: bridge
user-network:
driver: bridge
volumes:
user-db-data:
六、多环境配置
使用多个 Compose 文件
# 开发环境
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
# 生产环境
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
配置文件示例
docker-compose.dev.yml:
services:
web:
build:
context: .
target: development
volumes:
- ./src:/app/src
environment:
- DEBUG=true
docker-compose.prod.yml:
services:
web:
build:
context: .
target: production
deploy:
replicas: 3
resources:
limits:
cpus: '1'
memory: 1G
environment:
- DEBUG=false
七、环境变量管理
.env 文件
# .env 文件
DB_PASSWORD=secure_password
API_KEY=your_api_key
APP_ENV=production
REDIS_HOST=redis
在 compose 文件中使用
services:
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
web:
image: myapp
environment:
- API_KEY=${API_KEY}
- ENV=${APP_ENV}
八、最佳实践
| 实践 | 说明 |
|---|---|
| ✅ 使用命名卷 | 避免数据丢失,便于管理 |
| ✅ 设置重启策略 | restart: unless-stopped 或 always |
| ✅ 使用网络隔离 | 不同服务使用不同网络 |
| ✅ 健康检查 | 确保服务可用性 |
| ✅ 环境变量分离 | 敏感信息放入 .env 文件 |
| ✅ 版本锁定 | 指定镜像具体版本,不用 latest |
| ✅ 资源限制 | 设置 CPU 和内存限制 |
| ✅ 日志管理 | 配置日志驱动和大小限制 |
| ✅ 多阶段构建 | 减小镜像体积 |
| ✅ 安全扫描 | 定期扫描镜像漏洞 |
日志配置示例
services:
web:
image: nginx
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
九、常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 服务启动失败 | 依赖服务未就绪 | 使用 depends_on + healthcheck |
| 端口冲突 | 端口已被占用 | 修改端口映射或停止占用服务 |
| 数据丢失 | 未使用数据卷 | 使用 volumes 持久化数据 |
| 网络不通 | 服务不在同一网络 | 配置相同的 networks |
| 环境变量不生效 | .env 文件位置错误 | 确保 .env 在 compose 文件同目录 |
| 构建缓慢 | 未使用缓存 | 优化 Dockerfile,利用层缓存 |
| 内存不足 | 未限制资源 | 设置 deploy.resources.limits |
十、Docker Compose V1 vs V2
| 特性 | V1 | V2 |
|---|---|---|
| 命令 | docker-compose |
docker compose |
| 安装方式 | 独立二进制文件 | Docker CLI 插件 |
| 性能 | 较慢 | 更快 |
| 维护状态 | 已停止维护 | actively maintained |
| 推荐度 | ❌ 不推荐 | ✅ 推荐使用 |
十一、资源链接
| 资源 | 链接 |
|---|---|
| 🌐 官方文档 | https://docs.docker.com/compose/ |
| 📥 GitHub | https://github.com/docker/compose |
| 📚 示例仓库 | https://github.com/docker/awesome-compose |
| 🔧 在线验证 | https://www.compose-spec.io/ |
💡 提示:Docker Compose 非常适合开发、测试环境和中小型生产部署。对于大规模生产环境,建议考虑 Kubernetes 或 Docker Swarm 等更强大的编排工具。
希望这份指南能帮助您高效使用 Docker Compose 管理容器化应用!如有其他问题,欢迎继续提问。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)