Docker Compose Manager
Docker Compose Manager 是一个功能丰富的 Go 命令行工具,专为高效管理 Docker Compose 项目而设计。该工具提供智能化的镜像升级、自动化清理以及多环境支持等企业级功能。
✨ 功能特性
🚀 核心功能
- 智能镜像升级:支持
latest和semver(语义化版本)升级策略 - 自动化清理:升级后自动清理未使用的过期镜像
- 批量处理:一次性处理多个 Docker Compose 文件
- 安全备份:升级前自动创建配置文件备份
🎯 高级特性
- 多环境支持:支持开发、测试、生产等多环境配置
- Docker Compose v2 兼容:完全支持最新的 Docker Compose 规范
- 智能文件扫描:自动发现和处理 Compose 文件(支持 1Panel 等管理面板)
- 交互式选择:可视化选择要更新的文件和服务,支持批量选择
- 灵活配置:支持 YAML 配置文件和命令行参数
- 丰富的 UI:彩色输出、进度条、表格显示和交互式确认
🔧 技术特性
- Docker Hub 集成:实时获取最新镜像标签信息
- 语义化版本:智能处理和比较 semver 版本
- 错误恢复:升级失败时自动恢复原始配置
- 并发处理:支持并发处理多个文件以提高性能
📦 安装
🚀 一键安装 (推荐)
curl -fsSL https://raw.githubusercontent.com/QuentinHsu/compman/main/install-online.sh | bash📋 其他安装方式
详细安装指南请参考 INSTALL.md,包含:
- 在线安装: 一键安装脚本,自动检测系统架构
- 高级安装: 支持自定义选项的完整安装脚本
- 手动安装: 从 Releases 页面下载预编译二进制
- 源码构建: 从源代码编译安装
前置要求
- Docker 和 Docker Compose
- Linux/macOS/Windows (支持 x86_64 和 ARM64)
🚀 使用指南
基本用法
# 显示帮助信息
./compman --help
# 扫描当前目录的 Compose 文件
./compman scan
# 更新指定文件中的所有镜像
./compman update -f docker-compose.yml
# 使用 semver 策略更新镜像
./compman update -f docker-compose.yml --strategy semver
# 更新后清理未使用的镜像
./compman clean
# 交互式更新(推荐)
./compman update -f docker-compose.yml --interactive命令详解
scan - 扫描 Compose 文件
# 扫描当前目录
./compman scan
# 扫描指定目录
./compman scan --path /path/to/compose/files
# 递归扫描(限制深度)
./compman scan --path /path --depth 3update - 更新镜像
# 基本更新
./compman update -f docker-compose.yml
# 指定策略
./compman update -f docker-compose.yml --strategy latest
./compman update -f docker-compose.yml --strategy semver
# 批量更新多个文件
./compman update -f file1.yml -f file2.yml
# 交互式模式(推荐)- 可选择特定文件和服务
./compman update --paths /opt/1panel/docker/compose --interactive
# 包含特定服务
./compman update -f docker-compose.yml --include web,db
# 排除特定服务
./compman update -f docker-compose.yml --exclude cacheclean - 清理镜像
# 清理未使用的镜像
./compman clean
# 强制清理(不询问确认)
./compman clean --force
# 只显示将要清理的镜像
./compman clean --dry-run🎯 交互式功能
交互式模式是推荐的使用方式,它提供了可视化的选择界面:
# 启用交互式模式
./compman update --paths /opt/1panel/docker/compose --interactive交互式流程:
- 文件选择:显示所有发现的 Compose 文件,可以选择要处理的文件
- 服务选择:对于每个选中的文件,可以选择要更新的特定服务
- 确认操作:显示将要执行的操作摘要,确认后执行
交互操作说明:
- 输入数字切换选择状态(如:
1,3,5或1-3) - 输入
a全选所有项目 - 输入
n取消所有选择 - 按 Enter 确认当前选择
- 输入
q退出
配置文件
从 v1.1 开始,compman 使用 ~/.config/compman/config.yml 作为默认配置文件路径。
配置管理
# 查看当前配置文件路径和内容
./compman config
# 仅显示配置文件路径
./compman config --path-only
# 使用指定配置文件(内容会合并到默认配置)
./compman update --config my-config.yml
# 显示使用指定配置后的合并结果
./compman config --config my-config.yml配置文件示例
默认配置文件会在首次运行时自动创建,内容如下:
# ~/.config/compman/config.yml
compose_paths:
- "./docker-compose.yml"
- "./compose.yml"
image_tag_strategy: "latest"
environment: "production"
semver_pattern: "^v?\\d+\\.\\d+\\.\\d+$"
exclude_images: []
dry_run: false
backup_enabled: true
timeout: "5m"
docker_config:
host: ""
api_version: ""
tls_verify: false
cert_path: ""自定义配置
当你使用 --config 参数指定配置文件时,该文件的内容会合并到默认配置中,用户配置的值会覆盖默认值,然后保存到默认配置文件。这样确保了:
- 一致性:所有配置都存储在一个标准位置
- 便利性:不需要每次都指定配置文件
- 灵活性:可以随时更新配置而不影响工具使用
创建自定义配置文件:
# custom-config.yml
compose_paths:
- "/opt/1panel/docker/compose"
- "/home/user/projects"
image_tag_strategy: "semver"
environment: "development"
exclude_images:
- "nginx:alpine"
- "redis:latest"
backup_enabled: true
timeout: "10m"
docker_config:
host: "tcp://remote-docker:2376"
tls_verify: true
cert_path: "/path/to/certs"然后应用配置:
# 将自定义配置合并到默认配置
./compman config --config custom-config.yml
# 之后所有命令都会使用合并后的配置
./compman update
./compman scan📋 配置选项详解
基本配置
# 基本配置示例
compose_paths:
- "./docker-compose.yml"
- "./compose.yml"
image_tag_strategy: "latest" # latest 或 semver
environment: "production" # 环境标识
backup_enabled: true # 是否备份原文件
timeout: "5m" # 操作超时时间高级配置
# 高级配置示例
compose_paths:
- "/opt/1panel/docker/compose"
- "/home/projects/*/docker-compose.yml"
image_tag_strategy: "semver"
environment: "production"
semver_pattern: "^v?\\d+\\.\\d+\\.\\d+$" # semver 匹配模式
exclude_images: # 排除更新的镜像
- "postgres:*" # 排除所有 postgres 镜像
- "nginx:alpine" # 排除特定标签
dry_run: false # 是否为干运行模式
backup_enabled: true
timeout: "10m"
docker_config:
host: "" # Docker 主机地址
api_version: "" # Docker API 版本
tls_verify: false # 是否启用 TLS 验证
cert_path: "" # 证书路径配置选项说明
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
compose_paths |
[]string | ["./docker-compose.yml", "./compose.yml"] |
Compose 文件搜索路径 |
image_tag_strategy |
string | "latest" |
镜像标签升级策略:latest 或 semver |
environment |
string | "production" |
环境标识,用于日志和标记 |
semver_pattern |
string | "^v?\\d+\\.d+\\.\\d+$" |
semver 策略的版本匹配模式 |
exclude_images |
[]string | [] |
排除更新的镜像列表,支持通配符 |
dry_run |
bool | false |
干运行模式,不执行实际更新 |
backup_enabled |
bool | true |
是否在更新前备份原文件 |
timeout |
duration | "5m" |
操作超时时间 |
docker_config.host |
string | "" |
Docker 守护进程地址 |
docker_config.api_version |
string | "" |
Docker API 版本 |
docker_config.tls_verify |
bool | false |
是否启用 TLS 验证 |
docker_config.cert_path |
string | "" |
TLS 证书路径 |
🎨 输出示例
工具提供丰富的彩色输出和进度显示:
🔍 扫描 Docker Compose 文件...
✅ 找到 3 个文件
📋 发现的服务镜像:
┌─────────────┬─────────────────┬─────────────┬──────────────┐
│ 服务 │ 当前镜像 │ 当前版本 │ 最新版本 │
├─────────────┼─────────────────┼─────────────┼──────────────┤
│ web │ nginx │ 1.20 │ 1.21 │
│ api │ node │ 16-alpine │ 18-alpine │
│ database │ postgres │ 13 │ 15 │
└─────────────┴─────────────────┴─────────────┴──────────────┘
🚀 开始更新镜像...
[████████████████████████████████████████] 100% (3/3) 完成
✅ 更新完成!
- 成功更新: 3 个镜像
- 跳过: 0 个镜像
- 失败: 0 个镜像
🔧 开发
项目结构
docker-compose-manager/
├── cmd/
│ └── main.go # 应用程序入口点
├── internal/
│ ├── config/ # 配置管理
│ ├── compose/ # Compose 文件处理
│ ├── docker/ # Docker 客户端封装
│ ├── strategy/ # 更新策略实现
│ └── ui/ # 用户界面
├── pkg/
│ └── types/ # 共享类型定义
├── config.example.yaml # 配置示例
├── go.mod # Go 模块定义
└── README.md # 项目文档
构建和测试
# 运行测试
go test ./...
# 构建
go build -o compman cmd/main.go
# 运行开发版本
go run cmd/main.go --help🤝 贡献
欢迎贡献代码!请遵循以下步骤:
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
📄 许可证
本项目采用 MIT 许可证。详情请见 LICENSE 文件。
🙏 致谢
感谢以下开源项目:
- Cobra - 强大的 CLI 框架
- Viper - 配置管理
- Docker Go SDK - Docker API 客户端
- Go-Version - 语义化版本处理
该项目遵循 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。
On this page
Contributors
Created June 9, 2025
Updated August 26, 2025