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 还支持将多个镜像打包在一起。