docker-drag 的使用也是非常简单的,基本上和 docke pull 命令使用方法一致。其主要是借助 Python 的 Request 库和 HTTPS API 直接从仓库中拉取镜像,并保存为 TAR 文件。
# 直接在官方仓库拉取官方镜像
$ python docker_pull.py nginx:alpine
# 直接在官方仓库拉取三方镜像
$ python docker_pull.py mysql/mysql-server:8.0
# 直接在三方仓库拉取镜像
$ python docker_pull.py mcr.microsoft.com/windows/nanoserver@sha256:ae443bd9609b9ef06d21d6caab59505cb78f24a725cc24716d4427e36aedabf2
镜像下载完成后,你可以直接使用 docker load -i 命令对 TAR 文件进行加载。由于不在依赖容器工具本身,在一些实际使用场景中,例如:CICD 流程。这个小工具或许能助你解决大问题哟!
使用 download-frozen-image-v2 实现
与 docker-drag 类似的工具,还有一个 SHELL 脚本的实现 download-frozen-image-v2,该脚本隶属于 Moby 项目。
它的使用基本上和 docker-drag 类似,大致有如以下几步所示。
1.下载对应的脚本
$ wget https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh
2.download-frozen-image-v2 脚本使用语法
download-frozen-image-v2.sh target_dir image[:tag][@digest] ...
3.一个完整的使用实例
# 下载 Ubuntu 容器镜像
$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest
# download-frozen-image-v2 这里要稍为复杂点,需要自己手动打成 TAR 包
$ tar -C 'ubuntu' -cf 'ubuntu.tar' .
# 导入容器镜像
$ docker load -i ubuntu.tar
# 导入容器镜像完成后,运一个容器
$ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/#
使用 dp 实现
dp 同样也是一个实现上述类似需求的小工具。dp 使用 Go 语言开发,天生具有良好的跨平台性。相对于前两个工具来说更容易在多平台上部署使用,而且 dp 还支持将多个镜像打包在一起。