好物优选点击查看详情 京东购买

暂无内容

直接下载docker镜像包

这周正在做APIcat的企业版研发,准备适配阿里云的计算巢提供企业直接云安装的功能,顺便把原来写过的一个直接下载docker镜像包的小程序挂到了Gitee上面,有需要的可以点击下载

主要用处是不用下载和安装完整的docker程序,直接使用这个工具下载docker镜像文件。

众所周知,docker安装还是挺复杂的事情,windows下还需要wsl的支持,安装后还非常耗资源,有时候还有些莫名其妙的冲突,我就出现过和暗黑有时候会冲突的情况。

而docker hub的镜像下载,是只能使用docker pull进行的,这样就造成本来我们只想下一个image取服务器安装,但是不得不在本机安装庞大的docker来仅仅做一个pull的窘境。

所以我上网搜了一下,确实有很多人有类似的需求:

最近是因为好多国产系统架构都改了,发现docker hub的多架构支持,原来我的程序不支持,又把这块加了进去。就干脆改了开源,有需要的直接用。

主要功能

输入包名和版本号,下载docker image

程序还是非常简单的,docker下载基本就是个http客户端的事情,倒是没多复杂,所以程序里除了一个cmd的入口之外,主要就是个install.go。

install.go里面主要就是多次的http请求以及对应的json数据的Marshall和Unmarshall。

docker hub的http请求设计的很有意思,他在同样使用hash id表示docker包之外,用Accept来达到客户端获取不同内容的目的。

例如:

application/vnd.docker.distribution.manifest.list.v2+json : 获取该软件包的信息列表

application/vnd.docker.distribution.manifest.v2+json: 获得该架构的具体信息

官方解释包含以下几种:

  • application/vnd.docker.distribution.manifest.v1+json: schema1 (existing manifest format)
  • application/vnd.docker.distribution.manifest.v2+json: New image manifest format (schemaVersion = 2)
  • application/vnd.docker.distribution.manifest.list.v2+json: Manifest list, aka “fat manifest”
  • application/vnd.docker.container.image.v1+json: Container config JSON
  • application/vnd.docker.image.rootfs.diff.tar.gzip: “Layer”, as a gzipped tar
  • application/vnd.docker.image.rootfs.foreign.diff.tar.gzip: “Layer”, as a gzipped tar that should never be pushed
  • application/vnd.docker.plugin.v1+json: Plugin config JSON

这用法稍微有些阴间了,这不是一个很容易让人理解的通用做法,这个是不是符合RESTful标准也很难说。

总之,基本的下载逻辑就先获得客户端token,然后获得application/vnd.docker.distribution.manifest.list.v2+json里面的包信息列表,列表的条目里会包含支持的不同系统和架构,再选择对应需要的进入下一步下载。

下一步下载就是直接把Accept设置成application/vnd.docker.distribution.manifest.v2+json下载对应包的内容,再分层下载包的依赖包。

下载完成的都放到同一个文件夹,最后打包成一个tar.gz就行了。

有感兴趣代码的可以看intall.go

看这个官方说明,可能有直接下载gz包的模式,没研究过,可能能更快

原文链接:https://blog.csdn.net/baijiafan/article/details/129077647?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836840916800182116382%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836840916800182116382&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-26-129077647-null-null.nonecase&utm_term=docker%E3%80%81%E5%A5%BD%E7%94%A8

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享