不需要Docker环境的镜像下载工具,支持多平台、并发下载、智能缓存(layer增量更新)、认证登录。
注意:本工具仅用于下载镜像,不支持构建、运行容器。 可以直接在 release 页面下载预编译的二进制文件,无需安装Python环境。 支持Windows、macOS、Linux系统。
- 多平台支持: 自动识别并下载指定平台镜像(linux/amd64, linux/arm64, linux/arm/v7等)
- 并发下载: 多线程同时下载镜像层,速度提升30-50%
- 智能缓存: 基于SHA256的层缓存系统,增量更新节省带宽
- 内存优化: 流式下载,内存占用减少90%
- 网络重试: 智能重试机制,网络中断自动恢复
- 进度显示: 实时显示下载速度、进度百分比和剩余时间
- 认证支持: Docker登录认证,支持私有镜像源
- ✅ Docker Hub (registry-1.docker.io)
- ✅ Google Container Registry (gcr.io, us.gcr.io, eu.gcr.io, asia.gcr.io)
- ✅ AWS ECR (amazonaws.com)
- ✅ Harbor 私有仓库
- ✅ Quay.io
- ✅ 阿里云ACR (registry.cn-shanghai.aliyuncs.com, registry.cn-beijing.aliyuncs.com)
- ✅ OCI兼容注册表 (支持OCI镜像索引格式)
- Python 3.6+
- requests库
pip install requestspython docker_pull.py [镜像名] [选项]- 自动缓存: 下载的层自动缓存到
./docker_images_cache/ - 增量更新: 重复下载时自动复用已缓存的层
- 跨镜像共享: 不同镜像的相同层可以共享缓存
- 缓存统计: 显示缓存命中率和节省的数据量
# 下载最新版nginx
python docker_pull.py nginx:latest
# 下载指定平台镜像
python docker_pull.py --platform linux/arm64 ubuntu:20.04
# 自定义并发数
python docker_pull.py --max-concurrent-downloads 5 alpine:latest
# 禁用缓存
python docker_pull.py nginx:latest --no-cache
# 自定义缓存目录
python docker_pull.py nginx:latest --cache-dir /path/to/cache# Docker Hub登录
python docker_pull.py library/ubuntu:latest \
--username myuser --password mypass
# 私有Harbor仓库
python docker_pull.py harbor.company.com/dev/app:v1.2.0 \
--username devuser --password devpass
# 使用环境变量(更安全)
export USER=myuser
export PASS=mypass
python docker_pull.py private-image:latest \
--username $USER --password $PASS支持的平台格式:
linux/amd64(x86_64)linux/arm64(ARM64)linux/arm/v7(ARM 32位)linux/386(x86)linux/ppc64le(PowerPC)linux/s390x(IBM Z)
python docker_pull.py [-h] [--platform PLATFORM]
[--max-concurrent-downloads MAX_CONCURRENT_DOWNLOADS]
[--username USERNAME] [--password PASSWORD]
[--cache-dir CACHE_DIR] [--no-cache]
image
参数说明:
- image: Docker镜像名称 [registry/][repository/]image[:tag|@digest]
- --platform: 目标平台 (linux/amd64, linux/arm64, linux/arm/v7等)
- --max-concurrent-downloads: 最大并发下载层数 (默认: 3)
- --username: 用户名(私有镜像源认证)
- --password: 密码(私有镜像源认证)
- --cache-dir: 层缓存目录 (默认: ./docker_images_cache)
- --no-cache: 禁用层缓存功能| 下载方式 | 耗时 | 性能提升 |
|---|---|---|
| 顺序下载(1线程) | 43.97秒 | 基准 |
| 并发下载(3线程) | 28.08秒 | 36.1% |
| 并发下载(5线程) | 18.91秒 | 57.0% |
| 场景 | 首次下载 | 重复下载 | 缓存命中率 | 节省数据 |
|---|---|---|---|---|
| nginx:1.21.0 (6层) | 正常速度 | 瞬间完成 | 100% | 131MB |
| 相似版本镜像 | 部分缓存 | 显著加速 | 60-80% | 50-100MB |
# 在x86服务器上为ARM设备准备镜像
python docker_pull.py --platform linux/arm64 nginx:latest
# 生成 nginx_arm64.tar,可传输到ARM设备导入# GitHub Actions示例
- name: Pull Docker image
run: |
python docker_pull.py ${{ secrets.REGISTRY }}/${{ secrets.IMAGE }}:${{ env.TAG }} \
--username ${{ secrets.USERNAME }} \
--password ${{ secrets.PASSWORD }}# 批量下载不同平台镜像
python docker_pull.py myregistry.com/app:v1.0 --platform linux/amd64 --username user --password pass
python docker_pull.py myregistry.com/app:v1.0 --platform linux/arm64 --username user --password pass# 首次下载基础镜像
python docker_pull.py ubuntu:20.04
# 💾 Cache Statistics: Cache hits: 0/5 layers (0.0%)
# 下载相关镜像,自动复用基础层
python docker_pull.py ubuntu:20.04-slim
# 💾 Cache Statistics: Cache hits: 3/4 layers (75.0%), Data saved: 45.2 MB
# 重复下载,100%缓存命中
python docker_pull.py ubuntu:20.04
# 💾 Cache Statistics: Cache hits: 5/5 layers (100.0%), Data saved: 72.8 MB| 镜像源 | 认证方式 | 示例 |
|---|---|---|
| Docker Hub | 用户名密码 | --username dockerhubuser --password dockerhubpass |
| Harbor | 用户名密码 | --username harboruser --password harborpass |
| ECR | 用户名密码 | --username AWS --password $(aws ecr get-login-password) |
| GCR | 用户名密码 | --username oauth2accesstoken --password $(gcloud auth print-access-token) |
# 推荐:使用环境变量
export DOCKER_USERNAME=myuser
export DOCKER_PASSWORD=mypass
python docker_pull.py image --username $DOCKER_USERNAME --password $DOCKER_PASSWORD
# 不推荐:命令行直接写密码
python docker_pull.py image --username user --password pass # 不安全# 错误:401 Unauthorized
# 解决:检查用户名密码是否正确
python docker_pull.py private-image --username user --password pass
# 错误:403 Forbidden
# 解决:检查用户权限# 错误:Platform mismatch
# 解决:查看可用平台列表
python docker_pull.py image --platform invalid
# 脚本会显示所有可用平台# 设置代理
export HTTP_PROXY=http://proxy:8080
export HTTPS_PROXY=http://proxy:8080
python docker_pull.py image- 401: 需要认证或认证失败
- 403: 权限不足
- 404: 镜像不存在
- 429: 速率限制
下载完成后生成标准Docker tar文件:
- 文件名:
{registry}_{repository}_{image}_{tag}.tar - 格式: 100%兼容
docker load命令 - 大小: 与官方镜像一致
- 示例:
docker load < library_nginx.tar
- 🆕 智能层缓存系统: 基于SHA256的全局层管理
- 🆕 增量更新: 自动复用已下载的层,节省带宽
- 🆕 缓存统计: 显示缓存命中率和节省的数据量
- 🆕 OCI格式支持: 完整支持OCI镜像索引格式
- 🆕 阿里云ACR支持: 支持阿里云容器镜像服务
- ✅ 硬链接优化存储空间
- ✅ 跨镜像层共享
- ✅ 添加Docker登录认证支持
- ✅ 支持所有主流镜像源
- ✅ 优化内存使用90%
- ✅ 增强错误处理
- ✅ 改进进度显示
- ✅ 添加并发下载功能
- ✅ 支持多平台镜像
- ✅ 性能优化
- ✅ 基础镜像下载功能
MIT License - 可自由使用、修改和分发
快速开始:
# 查看帮助
python docker_pull.py --help
# 下载镜像(自动缓存)
python docker_pull.py nginx:latest --platform linux/amd64
# 💾 Cache Statistics: Cache hits: 0/6 layers (0.0%)
# 重复下载(缓存命中)
python docker_pull.py nginx:latest --platform linux/amd64
# 💾 Cache Statistics: Cache hits: 6/6 layers (100.0%), Data saved: 131.0 MB
# 查看缓存目录
ls -la docker_images_cache/layers/