记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

Docker Compose 生成器(把容器转换成对应的docker-compose.yaml文件)

Docker Compose 生成器(把容器转换成对应的docker-compose.yaml文件)
本工具用于读取系统中的存量Docker容器信息,自动生成对应的docker-compose.yaml文件。
它会根据容器之间的网络关系(自定义网络或link连接)将相关容器分组,并为每组容器生成一个独立的docker-compose.yaml文件。
理论上所有系统,包括NAS都可以用,但是有些特意删除的功能,比如命令、性能限制、endpiont等,由于极空间不支持,所以删除了。
功能特点
XML/HTML代码
  1. 读取系统中所有Docker容器信息
  2. 分析容器之间的网络关系(自定义network和link连接)
  3. 根据网络关系将相关容器分组
  4. 为每组容器生成对应的docker-compose.yaml文件(根据首个容器名称)
  5. 支持提取容器的各种配置,包括:容器名称、镜像、端口映射、环境变量、数据卷(volume/bind)、网络(host/bridge/macvlan单独配置,其它网络根据名称在一起)、重启策略、特权模式、硬件设备挂载、cap_add 能力、性能限制(极空间暂不支持,暂时移除)、command和entrypoint(在ZOS系统中不生成) 、健康检测、其他配置等等
使用方法
1、通过compose部署(推荐)
启用前确保系统安装了docker
docker cli
XML/HTML代码
  1. docker run -itd --name d2c \
  2.   -v /var/run/docker.sock:/var/run/docker.sock:ro \
  3.   -v /{path}:/app/compose \
  4.   -e NAS=debian \ # 可选,默认debian,详见下文说明
  5.   -e CRON="0 */12 * * *" \ # 可选,默认每天0点起,每天12小时执行一次,详见下文说明
  6.   -e NETWORK=true \ # 可选,默认true,详见下文说明
  7.   -e TZ=Asia/Shanghai \ # 可选,默认Asia/Shanghai
  8.   # 阿里云镜像源,国内选择
  9.   crpi-xg6dfmt5h2etc7hg.cn-hangzhou.personal.cr.aliyuncs.com/cherry4nas/d2c:latest
  10.   # github镜像源
  11.   # ghcr.io/coracoo/d2c:latest
docker-compose.yaml
XML/HTML代码
  1. services:
  2.   d2c:
  3.     # 阿里云镜像源,国内选择
  4.     image: crpi-xg6dfmt5h2etc7hg.cn-hangzhou.personal.cr.aliyuncs.com/cherry4nas/d2c:latest
  5.     # github镜像源
  6.     # image: ghcr.io/coracoo/d2c:latest
  7.     container_name: d2c
  8.     volumes:
  9.       - /var/run/docker.sock:/var/run/docker.sock:ro
  10.       - /{path}:/app/compose
  11.     environment:
  12.       - NAS=debian
  13.       - CRON="0 */12 * * *"
  14.       - NETWORK=true
  15.       - TZ=Asia/Shanghai
环境变量说明
XML/HTML代码
  1. NAS: 指定NAS系统类型
  2.     debian: 默认值,生成完整配置
  3.     zos: 极空间系统,不生成command和entrypoint配置
  4. CRON: 定时执行配置,使用标准cron表达式,示例:0 2 * * *(每天凌晨2点执行)
  5.     默认值:0 */12 * * *(每天0点起,每天12小时执行一次)
  6.     once: 执行一次后退出
  7. NETWORK: 控制bridge网络配置的显示方式
  8.     true: 默认值,显式配置bridge网络模式,即新创建的compose还是在bridge网络下
  9.     false: 隐式配置bridge网络模式,即新创建的compose会遵循compose的逻辑,创建新的网络
  10. TZ: 时区,用于定时执行
  11.     默认值:Asia/Shanghai
  12. 输出目录说明
  13.    /app/compose: 脚本输出目录,默认值为/app/compose
  14.    YYYY_MM_DD_HH_MM: 脚本执行时间,格式为YYYY_MM_DD_HH_MM,例如2023_05_04_15_00
2、直接运行(需要Python环境)
如果您的系统已安装Python环境,也可以直接运行:
确保系统中已安装Python 3和Docker
确保脚本有执行权限
chmod +x d2c.py
安装python所需的依赖包
pip install -r requirements.txt
运行脚本
./run.sh
脚本会在当前目录下创建一个compose文件夹,并在其中生成docker-compose.yaml文件
输出说明
对于单个独立的容器,生成的文件名格式为:{容器名}.yaml
对于有网络关系的容器组,生成的文件名格式为:{第一个容器名前缀}-group.yaml
所有生成的文件都会保存在compose/时间戳目录下
注意事项
该工具需要Docker命令行权限才能正常工作
生成的docker-compose.yaml文件可能需要手动调整以满足特定需求
对于使用默认bridge网络但没有显式link的容器,它们可能会被分到不同的组中
工具会将自定义网络标记为external: true,因为它假设这些网络已经存在
通过Docker运行时,会将宿主机的Docker套接字挂载到容器中,以便获取容器信息
工具支持定时执行,默认每12小时执行一次,可通过CRON环境变量自定义执行时间
此程序适合你需要大批量转移容器时候,又忘记了之前完整命令,或者快速启动容器,或者学习写docker-compose的情况。 

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):