这周正在做APIcat的企业版研制,打算适配阿里云的估算巢提供企业直接云安装的功能,顺便把原先写过的一个直接下载docker镜像包的小程序挂到了Gitee里面,有须要的可以点击下载
主要好处是不用下载和安装完整的docker程序,直接使用这个工具下载docker镜像文件。
众所周知,docker安装还是挺复杂的事情,windows下还须要wsl的支持,安装后还特别斥资源docker hub怎么用,有时侯还有些莫名其妙的冲突docker hub怎么用linux空间,我就出现过和暗黑有时侯会冲突的情况。
而dockerhub的镜像下载,是只能使用dockerpull进行的,这样就导致原本我们只想下一个image取服务器安装,并且不得不在本机安装庞大的docker来仅仅做一个pull的境况。
所以我上网搜了一下,确实有好多人有类似的需求:
dockerhub-DownloadingDockerImagesfromDockerHubwithoutusingDocker-DevOpsStackExchange
我照着这种指引deepin linux,前段时间就写了这个小程序。
近来是由于很多国产系统构架都改了,发觉dockerhub的多构架支持,原先我的程序不支持,又把这块加了进去。就干脆改了开源,有须要的直接用。
主要功能
输入包名和版本号,下载dockerimage
支持本地缓存,下载好的layer不再重复下载直接打包gz包,用于后续的dockerload支持多构架选择,使用参数-arch可以指定想下载的系统和构架支持仅复印信息的复印模式程序说明
程序还是十分简单的,docker下载基本就是个http顾客端的事情,倒是没多复杂,所以程序里不仅一个cmd的入口之外,主要就是个install.go。
install.go上面主要就是多次的http恳求以及对应的json数据的Marshall和Unmarshall。
dockerhub的http恳求设计的很有意思,他在同样使用hashid表示docker包之外,用Accept来达到顾客端获取不同内容的目的。
比如:
application/vnd.docker.distribution.manifest.list.v2+json:获取该软件包的信息列表
application/vnd.docker.distribution.manifest.v2+json:获得该构架的具体信息
官方解释包含以下几种:
这用法稍为有些阳间了,这不是一个很容易让人理解的通用做法,这个是不是符合RESTful标准也很难说。
其实,基本的下载逻辑就先获得顾客端token,之后获得application/vnd.docker.distribution.manifest.list.v2+json上面的包信息列表,列表的条目里会包含支持的不同系统和构架,再选择对应须要的步入下一步下载。
下一步下载就是直接把Accept设置成application/vnd.docker.distribution.manifest.v2+json下载对应包的内容,再分层下载包的依赖包。
下载完成的都放在同一个文件夹,最后打包成一个tar.gz就行了。
有感兴趣代码的可以看intall.go
看这个官方说明,可能有直接下载gz包的模式,没研究过,可能能更快