dget:一款直接从Docker Hub下载镜像包的强力工具
dget:一款直接从Docker Hub下载镜像包的强力工具
一、项目简介
1.1 什么是dget?
dget是一款由Go语言开发的Docker镜像直接下载工具,主要解决离线环境下安装Docker镜像的痛点问题。
项目信息:
| 项目 | 信息 |
|---|---|
| 项目名称 | dget |
| 作者 | extrame(刘明) |
| 编程语言 | Go |
| 许可证 | Apache-2.0 |
| 仓库地址 | https://gitee.com/extrame/dget |
| Star数 | 186 |
| Fork数 | 55 |
1.2 解决的问题
在日常工作中,我们经常会遇到以下场景:
- 内网环境:无法访问Docker Hub,需要离线安装Docker镜像
- 网络缓慢:Docker Hub访问速度慢,下载大镜像耗时过长
- 批量部署:需要将镜像迁移到其他环境
- 临时使用:不想安装完整Docker,只想获取镜像文件
传统的解决方案是: 1. 在有网环境下安装Docker 2. 拉取镜像 3. 导出为tar包 4. 传输到目标机器 5. 导入镜像
而dget可以直接从Docker Hub下载镜像包,无需安装Docker!
1.3 核心特性
✅ 无需Docker - 直接下载镜像包,不依赖Docker运行环境 ✅ 多平台支持 - Windows、Linux、Mac全平台支持 ✅ 多架构支持 - 支持x86、ARM等常见架构 ✅ 第三方Registry - 支持阿里云、DaoCloud等私有仓库 ✅ 代理支持 - 支持配置代理下载 ✅ 断点续传 - 支持缓存和断点下载 ✅ 开源免费 - Apache 2.0许可证
二、工作原理
2.1 传统方式 vs dget方式
传统方式(需要Docker):
1. 安装Docker
2. docker pull 镜像
3. docker save -o xxx.tar 镜像
4. 传输到目标机器
5. docker load -i xxx.tar
dget方式(无需Docker):
1. 下载dget工具(单文件)
2. dget 镜像名
3. 直接获取tar.gz包
4. 传输到目标机器
5. docker load -i xxx.tar.gz
2.2 架构图
┌─────────────────────────────────────────────────┐
│ 用户终端 │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ dget 工具 │ │
│ │ - 直接下载Docker镜像层 │ │
│ │ - 组装成tar.gz包 │ │
│ │ - 支持缓存和代理 │ │
│ └─────────────────────────────────────────┘ │
│ │ │
└──────────────────────│──────────────────────────┘
│
┌─────────────┴─────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Docker Hub │ │ 第三方Registry │
│ (docker.io) │ │ - 阿里云 │
│ │ │ - DaoCloud │
└─────────────────┘ └─────────────────┘
三、安装部署
3.1 下载预编译二进制
项目提供了多平台的预编译二进制文件,可以直接下载使用:
Windows:
# 下载Windows x64版本
wget https://gitee.com/extrame/dget/raw/master/bin/windows_amd64/dget.exe
# 或使用PowerShell
Invoke-WebRequest -Uri "https://gitee.com/extrame/dget/raw/master/bin/windows_amd64/dget.exe" -OutFile "dget.exe"
Linux:
# 下载Linux amd64版本
wget https://gitee.com/extrame/dget/raw/master/bin/linux_amd64/dget
# 下载Linux ARM版本
wget https://gitee.com/extrame/dget/raw/master/bin/linux_arm/dget
# 添加执行权限
chmod +x dget
# 移动到系统目录
sudo mv dget /usr/local/bin/
Mac:
# Intel芯片
wget https://gitee.com/extrame/dget/raw/master/bin/darwin_amd64/dget
# Apple Silicon (M1/M2)
wget https://gitee.com/extrame/dget/raw/master/bin/darwin_arm64/dget
# 添加执行权限
chmod +x dget
sudo mv dget /usr/local/bin/
3.2 使用Go安装
如果已安装Go环境,可以使用go install安装:
# 安装最新版本
go install gitee.com/extrame/dget/cmd/dget@latest
# 或指定版本
go install gitee.com/extrame/dget/cmd/dget@v1.0.0
3.3 源码编译
# 克隆仓库
git clone https://gitee.com/extrame/dget.git
cd dget
# 编译
go build -o dget ./cmd/dget
# 安装
sudo mv dget /usr/local/bin/
四、基本用法
4.1 下载官方镜像
# 下载官方镜像(默认latest标签)
dget nginx
# 指定版本标签
dget nginx:1.25
# 指定版本号
dget influxdb:1.8.3
4.2 下载过程
$ dget nginx:1.25
正在获取镜像: nginx:1.25
正在解析镜像层...
层: 2c2b34289e2c 100% [===========================>] 50.65MB / 50.65MB
层: 3d44a1fd55a 100% [===========================>] 28.29MB / 28.29MB
层: a6c8cc2b88d2 100% [===========================>] 4.84MB / 4.84MB
层: 4aac77e7c9ff 100% [===========================>] 10.03MB / 10.03MB
层: 1e8a246bb8e4 100% [===========================>] 7.87MB / 7.87MB
层: e2d2c42f02b8 100% [===========================>] 7.23MB / 7.23MB
下载完成!
文件: tmp_nginx_1.25.tar.gz
大小: 108.91 MB
4.3 下载位置
默认下载到当前目录的 tmp_xxx 文件夹中:
# 查看下载的文件
ls -la tmp_*
# 移动到目标位置
mv tmp_nginx_latest.tar.gz /path/to/your/destination/
4.4 缓存机制
dget支持缓存功能,如果下载出错,直接重新执行即可:
# 首次下载
dget redis:7.0
# 如果下载失败,再次执行会自动使用缓存
dget redis:7.0
五、高级用法
5.1 从第三方Registry下载
阿里云镜像:
dget alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:220901.1
DaoCloud镜像:
dget -registry m.daocloud.io nginx:latest
其他私有Registry:
dget myregistry.example.com/myproject/myimage:v1.0
5.2 选择架构
对于多架构镜像,可以使用 -arch 参数指定架构:
# 下载ARM架构
dget -arch linux/arm influxdb:1.8.3
# 下载ARM64架构
dget -arch linux/arm64 influxdb:1.8.3
# 下载x86_64架构
dget -arch linux/amd64 influxdb:1.8.3
5.3 使用代理
如果网络环境需要代理,可以使用 -proxy 参数:
# 使用HTTP代理
dget -proxy http://proxy.example.com:8080 nginx:latest
# 使用SOCKS5代理
dget -proxy socks5://proxy.example.com:1080 nginx:latest
5.4 获取可用标签
如果不知道镜像有哪些版本标签,可以使用 -tag 参数查询:
# 查询nginx可用标签
dget -tag nginx
# 查询influxdb可用标签
dget -tag influxdb
输出示例:
nginx available tags:
latest
1.25
1.25-alpine
1.24
1.24-alpine
1.23
1.23-alpine
...
5.5 输出到指定目录
# 下载到指定目录
dget -o /opt/images nginx:latest
# 重命名输出文件
dget -o /opt/images/my-nginx.tar.gz nginx:latest
5.6 静默模式
# 不显示进度条
dget -q nginx:latest
# 只显示错误
dget -v nginx:latest 2>&1 | grep -i error
六、使用场景
6.1 内网离线部署
这是dget最典型的使用场景:
# 1. 在有网环境下下载所需镜像
dget nginx:1.25
dget mysql:8.0
dget redis:7.0
dget postgres:15
dget elasticsearch:8.11.0
# 2. 打包传输
tar czvf docker-images.tar.gz tmp_*
# 3. 传输到内网服务器
scp docker-images.tar.gz internal-server:/opt/
# 4. 内网导入
cd /opt/
tar xzvf docker-images.tar.gz
docker load -i tmp_nginx_latest.tar.gz
docker load -i tmp_mysql_8.0.tar.gz
6.2 批量下载
# 批量下载多个镜像
for img in nginx:1.25 mysql:8.0 redis:7.0; do
dget "$img"
done
6.3 定时同步镜像
可以使用cron定时同步镜像:
# 编辑crontab
crontab -e
# 每天凌晨2点同步最新镜像
0 2 * * * cd /opt/images && dget -q nginx:latest mysql:8.0 redis:7.0 >> /var/log/dget-sync.log 2>&1
6.4 CI/CD集成
在Jenkins或GitLab CI中使用:
# .gitlab-ci.yml示例
build:
script:
- dget -o images/ nginx:$NGINX_VERSION
- docker load -i images/tmp_nginx_*.tar.gz
七、常见问题
7.1 下载速度慢
解决方法:
1. 使用国内镜像源 2. 配置代理 3. 使用阿里云等国内Registry
7.2 镜像不存在
错误信息: Error: manifest not found
解决方法:
1. 检查镜像名称和标签是否正确 2. 使用 -tag 查看可用标签 3. 确认Registry地址是否正确
7.3 磁盘空间不足
解决方法:
# 清理dget缓存
rm -rf tmp_*
# 或指定下载到其他分区
dget -o /data/images nginx:latest
7.4 权限问题
# Linux下可能需要sudo
sudo dget nginx:latest
# 或者创建软链接到系统目录
sudo ln -s $(pwd)/dget /usr/local/bin/dget
八、与其他工具对比
8.1 工具对比表
| 特性 | dget | docker save | docker export |
|---|---|---|---|
| 需要Docker | ❌ 不需要 | ✅ 需要 | ✅ 需要 |
| 单文件工具 | ✅ 是 | ❌ 否 | ❌ 否 |
| 跨平台 | ✅ 多平台 | ❌ 仅Linux | ❌ 仅Linux |
| 第三方Registry | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 多架构支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 代理支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
8.2 为什么选择dget?
1. 轻量级:单文件,无需安装Docker 2. 快速:直接下载,无需先pull再save 3. 灵活:支持多架构、多Registry 4. 简单:命令简单,易于集成
九、总结
dget是一款非常实用的Docker镜像下载工具,特别适合以下场景:
✅ 内网离线部署 - 无需安装Docker即可获取镜像 ✅ 镜像迁移 - 快速备份和迁移镜像 ✅ CI/CD集成 - 简化自动化流程 ✅ 多架构支持 - 支持ARM等特殊架构
项目地址: https://gitee.com/extrame/dget
如果您经常需要处理Docker镜像,强烈推荐试试dget,它会让您的工作更加高效!
参考资源:
- GitHub:https://github.com/extrame/dget
- Gitee:https://gitee.com/extrame/dget
- Docker官方文档:https://docs.docker.com/







