直接下载docker镜像包

news2024/11/17 11:49:46

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

https://gitee.com/extrame/dgeticon-default.png?t=N176https://gitee.com/extrame/dget

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

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

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

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

dockerhub - Downloading Docker Images from Docker Hub without using Docker - DevOps Stack Exchangeicon-default.png?t=N176https://devops.stackexchange.com/questions/2731/downloading-docker-images-from-docker-hub-without-using-docker我照着这些指引,前段时间就写了这个小程序。

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

主要功能

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

  1. 支持本地缓存,下载好的layer不再重复下载
  2. 直接打包gz包,用于后续的docker load
  3. 支持多架构选择,使用参数-arch可以指定想下载的系统和架构
  4. 支持仅打印信息的打印模式

程序说明

程序还是非常简单的,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包的模式,没研究过,可能能更快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安灯呼叫系统助力企业实现精益管理

在当前的生产企业管理过程当中,生产现场难免会出现各种异常情况影响生产,乳设备需要机修、品质问题、物料呼叫等各种情况,在以往这些问题出现过后处理的方式都是些申请单,由人工到各个部门去给领导签字,浪费大量时间沟…

【Unity VR开发】结合VRTK4.0:远距离抓取物体

语录: 我们都生活在阴沟里,但仍有人仰望星空。 前言: 空间场景中的一个常见问题是试图抓取一个无法触及或太远而无法到达的对象。VRTK提供了一种简单的方法来实现这种技术(Interactions.PointerInteractors.DistanceGrabber&…

上市公司每股社会贡献值(数据+代码)(2000-2020年)

数据来源:自我整理 时间跨度:2000-2020年 区域范围:上市公司 指标说明: 每股社会贡献值( 净利润所得税费用营业税金及附加支付给职工以及为职工支付的现金本期应付职工薪酬-上期应付职工薪酬财务费用捐赠-排污费及清理费) / 期…

MySQL服务器体系架构 执行原理

前言 前边我们了解了MySQL采用客户端/服务器架构,用户通过客户端程序发送增删改查需求,服务器程序收到请求后处理,并且把处理结果返回给客户端。这篇文章主要看下MySQL服务端是如何处理客户端的请求,感兴趣的小伙伴们可以参考借鉴…

【单目标优化算法】烟花优化算法(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

定时器设计

定时器设计 定时器应用: 游戏的Buff实现,Redis中的过期任务,Linux中的定时任务等等心跳检测,如服务器接收队列满了,tcp客户端会定时探测是否能够发送数据 定时器数据结构选取要求: 需要快速找到到期任务…

防火墙设置实验(12)

预备知识防火墙基本原理 防火墙是一种访问控制技术,位于可信与不可信网络之间,通过设置一系列安全规则对两个网络之间的通信进行控制,检测交换的信息,防止对信息资源的非法存取和访问。防火墙分为软防火墙和硬防火墙,一…

关于分布式的一些基础知识

1、分布式锁 (ngix,zoomkeeper,raft,kafka) 在单机场景下,可以使用语言的内置锁来实现进程或者线程同步。但是在分布式场景下,需要同步的进程可能位于不同的节点上,那么就需要使用分布式锁。 为了保证一个方法或属性在高并发情况下的同一时间…

【面试题】前端春招第二面

不容错过的一些面试题小细节,话不多说,直接看题~大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库HTML/CSS/Javascript/ES篇(1)标准盒模型和怪异盒…

k8s集群概念组件简介

一、Kubernetes 集群概述1.2 Kubernetes 资源资源用途服务(Service)Kubernetes 使用服务在一组 pod 上公开正在运行的应用程序。ReplicaSetKubernetes 使用 ReplicaSet 来维护恒定的 pod 号。Deployment维护应用程序生命周期的资源对象。1.3 Kubernetes …

重生之我是赏金猎人-SRC漏洞挖掘(七)-看我如何从FUZZ到SRC官网XSS

0x01 前奏 本文来自:RGM78sec 截至发稿,vuln早已修复 前不久在挖掘某SRC时,偶然在该SRC官网的编辑器发现了一个接口。 起初以为是任意文件包含能RCE了,后来测试发现只是拼接读取了远程资源站的图片,原本都想着放弃…

TypeScript(二)基本数据类型

前言 距离上篇博客已有两年了,对TS也有了一定的认识,于是计划继续更新系列文章 基本数据类型 在JS中,基本数据类型有:Boolan(布尔),Number(数字),String&a…

什么是事务?Mysql事务怎么用?Mybatis怎么操作事务的?Spring呢?快进来看看

目录 一、计算机中的事务 1. 概念 2.事务的ACID特性 3.事务类型 1)手动事务 2)自动事务 4.为什么需要事务? 5.优点 二、MySQL事务 1.语法格式: 2.关闭自动提交,开启新事务 3.开启自动提交,关闭事务控制 三、Mybatis事务 Mybatis开关事务控…

Meta AR眼镜主管:正开发史无前例的AR,但要解决很多困难

前不久,Meta CTO Andrew Bosworth在个人博客上“怒斥”公司内部不够专注,应该将资源投入在有核心竞争力、高投资回报率的业务上,而不是开发取悦用户却不赚钱的产品。尽管删除一些小众功能后,用户可能会不满,但为了让Me…

Bi系统跟数据中台的区别是什么?

随着数据时代的发展,BI分析是当今数据时代必不可少的能力之一。BI系统通过系统化产品化的方法,能够大幅降低数据的获取成本、提升数据使用效率。同时借助可视化、交互式的操作,可以高效支持业务的分析及发展。 BI如此火热,随之而…

openpnp - 增加散料飞达

文章目录openpnp - 增加散料飞达概述笔记飞达在设备上的放置方向编带料在飞达中的方向将相机移动到飞达料的第一孔的中心捕获保存第1孔中心编带设置测试相机位置是否正确测试吸嘴的位置是否正确将吸嘴回到安全位置测试是否能正确抓料ENDopenpnp - 增加散料飞达 概述 使用open…

MySQL性能调优与设计——MySQL调优——慢查询

MySQL调优–慢查询 MySQL调优金字塔 很明显从图上可以看出,越往上走,难度越来越高,收益却越来越小。 对于架构调优,在系统设计时首先需要充分考虑业务的实际情况,是否可以把不适合数据库做的事情放到数据仓库、搜索引…

分享111个HTML旅游交通模板,总有一款适合您

分享111个HTML旅游交通模板,总有一款适合您 111个HTML旅游交通模板下载链接:https://pan.baidu.com/s/1VHJSBVJbj4PQpPAwxysJBg?pwd8b17 提取码:8b17 Python采集代码下载链接:采集代码.zip - 蓝奏云 汽车租赁平台网页模板 汽…

时的科技迎1亿融资,这辆“空中的士”能否实现真正飞行?

近期,进行载人eVTOL的研发、生产和销售的时的科技宣布完成1亿元Pre-A轮融资,成立不到两年,这已是时的科技的第三轮融资,此前,时的科技已获得蓝驰创投和德迅投资千万美元种子轮投资。在不少人看来,时的科技所…

恢复出厂设置在哪里?抓住这份官方指南(Win10电脑)

当电脑经常报告错误,并伴有运行缓慢和停滞等问题时,很可能是计算机老化造成的。想要解决这个问题,可以通过恢复出厂设置使得电脑恢复成初始状态,自然而然问题就解决了。 但是很多人不知道,恢复出厂设置在哪里&#xf…