Docker Compose 核心使用指南与 Cheatsheet - 来自 Collabnix/DockerLabs 的实践总结
前言
在现代应用开发中,容器化技术已成为不可或缺的一部分。Docker Compose 作为 Docker 官方提供的容器编排工具,极大简化了多容器应用的管理工作。本文将基于 Collabnix/DockerLabs 项目中的实践经验,深入解析 Docker Compose 的核心概念与实用技巧。
Docker Compose 基础概念
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过一个 YAML 文件来配置应用程序的服务,使得开发者可以用一条命令启动所有服务。与生产环境中使用的 Docker Swarm 不同,Compose 更适用于开发和测试环境。
核心优势
- 一键式环境搭建:通过单个配置文件定义整个应用栈
- 服务依赖管理:自动处理服务间的依赖关系
- 环境隔离:为每个项目创建独立的环境
- 配置即代码:所有环境配置可版本控制
典型 Compose 文件解析
以下是一个典型的 docker-compose.yml 文件示例,我们通过它来理解核心配置项:
version: '3'
services:
web:
build: . # 使用当前目录的Dockerfile构建镜像
image: web-client # 指定镜像名称
depends_on: # 定义服务依赖
- server
ports: # 端口映射
- "8080:8080"
server:
image: akshitgrover/helloworld # 使用现有镜像
volumes: # 卷挂载配置
- "/app" # 匿名卷
- "data:/data" # 命名卷
- "mydata:/data" # 外部卷
volumes:
data: # 命名卷定义
mydata:
external: true # 使用外部已存在的卷
关键配置项说明
- version:指定 compose 文件格式版本
- services:定义应用中的各个服务
- build/image:构建镜像或使用现有镜像
- depends_on:服务启动顺序控制
- ports:端口映射配置
- volumes:数据卷配置,支持多种类型
Docker Compose 命令详解
1. 构建服务镜像
docker-compose build [OPTIONS] [SERVICE...]
常用选项:
--compress
:压缩构建上下文,加速传输--no-cache
:不使用缓存构建--pull
:总是拉取基础镜像的最新版本--build-arg
:向 Dockerfile 传递构建参数
实践建议:在团队协作中,建议使用 --build-arg
传递环境特定参数,保持 Dockerfile 的通用性。
2. 创建并启动服务
docker-compose up [OPTIONS] [SERVICE...]
核心选项:
-d
:后台运行容器--build
:强制重新构建镜像--scale SERVICE=NUM
:扩展特定服务的实例数量--force-recreate
:强制重新创建容器
典型场景:
# 后台启动全部服务
docker-compose up -d
# 仅启动web服务及其依赖
docker-compose up web
# 扩展web服务到3个实例
docker-compose up --scale web=3
3. 停止和清理资源
docker-compose down [OPTIONS]
重要选项:
--rmi all
:删除所有相关镜像-v
:同时删除数据卷--timeout
:设置停止超时时间
注意事项:默认情况下不会删除外部卷(external: true)和匿名卷,使用 -v
选项需谨慎。
4. 服务伸缩
docker-compose scale SERVICE=NUM
示例:
# 将server扩展至3个实例,web扩展至2个实例
docker-compose scale server=3 web=2
实现原理:底层通过创建多个相同服务的容器实例实现,适合负载测试场景。
5. 配置验证
docker-compose config
最佳实践:在部署前执行此命令验证 compose 文件语法,避免运行时错误。
高级技巧与经验分享
-
环境变量管理:
- 使用
.env
文件管理环境变量 - 在 compose 文件中通过
${VAR_NAME}
引用
- 使用
-
多环境配置:
- 使用多个 compose 文件(如 docker-compose.override.yml)
- 通过
-f
选项指定不同环境的配置文件
-
健康检查:
- 在服务配置中添加
healthcheck
指令 - 结合
depends_on
实现服务健康依赖
- 在服务配置中添加
-
资源限制:
- 通过
deploy.resources
设置 CPU/内存限制 - 特别适合本地开发环境资源管理
- 通过
-
网络配置:
- 自定义网络提高服务隔离性
- 使用
networks
配置服务间通信
常见问题排查
-
端口冲突:
- 使用
docker-compose ps
查看端口占用 - 检查是否有其他容器占用相同端口
- 使用
-
构建缓存问题:
- 当依赖更新但缓存未失效时,使用
--no-cache
重建 - 合理使用
.dockerignore
文件减少构建上下文
- 当依赖更新但缓存未失效时,使用
-
卷权限问题:
- Linux 下注意宿主机与容器的用户权限
- 可考虑在 Dockerfile 中创建特定用户
-
服务启动顺序:
depends_on
仅控制启动顺序,不等待服务就绪- 结合健康检查实现真正的服务依赖
总结
Docker Compose 作为开发者的利器,极大地简化了多容器应用的管理工作。通过本文的介绍,您应该已经掌握了:
- Compose 文件的核心配置项
- 日常开发中的常用命令
- 高级使用技巧和最佳实践
- 常见问题的解决方法
建议读者在实际项目中多加练习,逐步掌握 Docker Compose 的强大功能,提升开发效率和环境一致性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考