logo
0
0
Login
新增Docker镜像同步脚本及相关文件

Docker镜像同步脚本

这是一个用于同步Docker镜像的Bash脚本,可以从一个Docker仓库拉取镜像,重新标记后推送到另一个仓库。

功能特性

  • ✅ 从源Docker仓库拉取镜像
  • ✅ 重新标记镜像为新的仓库名称
  • ✅ 推送到目标Docker仓库
  • ✅ 自动执行,无需确认
  • ✅ 保留本地镜像,不自动删除
  • ✅ 详细的日志输出和错误处理
  • ✅ Docker环境检查

使用方法

基本用法

./docker-sync.sh <源镜像> [目标镜像]

参数说明

  • 源镜像: 要拉取的Docker镜像名称 (例如: nginx, nginx:1.21)
  • 目标镜像: 可选,要推送到的目标镜像名称,默认使用环境变量构建路径

环境变量

脚本支持通过环境变量设置默认仓库路径:

export DOCKER_REGISTRY=docker.cnb.cool # Docker仓库地址 export REPO_SLUG_LOWERCASE=fastjrun/docker # 仓库路径

当设置环境变量后,脚本会自动拼接为:${DOCKER_REGISTRY}/${REPO_SLUG_LOWERCASE}/

如果没有设置环境变量,会使用默认路径:docker.cnb.cool/fastjrun/docker/

使用示例

  1. 使用环境变量 (推荐):
export DOCKER_REGISTRY=docker.cnb.cool export REPO_SLUG_LOWERCASE=fastjrun/docker ./docker-sync.sh nginx

自动推送到:docker.cnb.cool/fastjrun/docker/nginx 执行流程:

  • docker pull nginx
  • docker tag nginx docker.cnb.cool/fastjrun/docker/nginx
  • docker push docker.cnb.cool/fastjrun/docker/nginx
  1. 自定义镜像名:
export DOCKER_REGISTRY=docker.cnb.cool export REPO_SLUG_LOWERCASE=fastjrun/docker ./docker-sync.sh nginx nginx-custom

自动推送到:docker.cnb.cool/fastjrun/docker/nginx-custom

  1. 自定义仓库路径:
export DOCKER_REGISTRY=custom-registry.com export REPO_SLUG_LOWERCASE=myproject/docker ./docker-sync.sh app

自动推送到:custom-registry.com/myproject/docker/app

  1. 指定完整路径:
./docker-sync.sh nginx:1.21 docker.cnb.cool/fastjrun/docker/nginx:1.21
  1. 指定其他仓库:
./docker-sync.sh redis:alpine other-registry.com/project/redis
  1. 带版本标签:
./docker-sync.sh postgres:13 docker.cnb.cool/fastjrun/docker/postgres-db:13

脚本特性

安全检查

  • 检查Docker是否安装
  • 检查Docker服务是否运行
  • 参数验证

错误处理

  • 详细的错误信息
  • 操作失败时自动退出
  • 彩色日志输出

本地镜像处理

脚本执行完成后会保留所有本地镜像:

  • 源镜像 (从原仓库拉取的)
  • 目标镜像 (重新标记的)
  • 如需清理,请手动执行 docker rmi 命令

环境要求

  • Docker 已安装并运行
  • Bash shell
  • 对目标仓库有推送权限

注意事项

  1. 确保对目标仓库有推送权限
  2. 确保网络连接正常
  3. 大镜像可能需要较长时间
  4. 脚本会要求确认操作,避免误执行

故障排除

常见问题

  1. 权限错误: 确保已登录到目标Docker仓库
  2. 网络错误: 检查网络连接和仓库地址
  3. 镜像不存在: 确认源镜像名称正确

调试模式

脚本提供了详细的日志输出,包括:

  • 🔵 [INFO] 信息日志
  • 🟡 [WARN] 警告日志
  • 🔴 [ERROR] 错误日志

示例输出

========================================== Docker镜像同步配置: 源镜像: redis 目标镜像: docker.cnb.cool/fastjrun/docker/redis ========================================== [INFO] Docker环境检查通过 [INFO] 开始拉取镜像: redis [INFO] 镜像拉取成功: redis [INFO] 标记镜像: redis -> docker.cnb.cool/fastjrun/docker/redis [INFO] 镜像标记成功: docker.cnb.cool/fastjrun/docker/redis [INFO] 开始推送镜像: docker.cnb.cool/fastjrun/docker/redis [INFO] 镜像推送成功: docker.cnb.cool/fastjrun/docker/redis [INFO] 镜像同步完成! [INFO] 所有操作完成!