Docker 拉取镜像及标签 *** 作 pull | tag

Docker 拉取镜像及标签 *** 作 pull | tag,第1张

Docker拉取镜像及标签 *** 作pull|tag

本文主要介绍Docker的拉镜和标签 *** 作pull|tag,有很好的参考价值。希望对你有帮助。来和边肖一起看看吧。

翻看了一下Fabric项目的源代码,发现了Docker的一些内容,有很多东西我并没有完全理解。看了一下,看到用dockerpull拉Fabric图像,用dockertag重命名图像。稍微想了一下,发现虽然用了,但是不太懂,得过且过。现在我已经忘记如何使用它了...

1.dockerpull

一般来说,从镜像源拉映像就是从DockerHub拉映像。

dockerpull[OPTIONS]NAME[:TAG|@DIGEST]

选项,缩写 系统默认值 形容 –all-tags,-a 从镜像库拉 获取所有标记标记名称的镜像–disable-content-trust true 忽略镜像检查

例如:

$dockerpullhyperledger/fabric-$IMAGES:$FABRIC_TAG Options: #-a拉取所有不同标签的镜像 -a,--all-tagsDownloadalltaggedimagesintherepository #忽略镜像校验,默认项 --disable-content-trustSkipimageverification(defaulttrue)

我们来看看实际 *** 作。运行环境是Ubuntu16.04。

1.1普通拉

实际上,我们可以直接拉取这个图像的最新版本,默认情况下,我们可以拉取带有最新标签的图像。

例如:

#拉取了java的镜像,tag为latest $dockerpulljava Usingdefaulttag:latest latest:Pullingfromlibrary/java 5040bd298390:Pullcomplete fce5728aad85:Pullcomplete 76610ec20bf5:Pullcomplete 60170fec2151:Pullcomplete e98f73de8f0d:Pullcomplete 11f7af24ed9c:Pullcomplete 49e2d6393f32:Pullcomplete bb9cdec9c7f3:Pullcomplete Digest:sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status:Downloadednewerimageforjava:latest

拉取完成,我们可以查看我们已经拥有的图像。

$dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE javalatestd23bdf5b1b1b20monthsago643MB

1.2拉标签名称

从上面的输出内容可以发现,虽然只拉了一个java映像,但是在拉的过程中有Pullcomplete、5040bd298390、fce5728aad85等八个。这是因为映像可以由多个“层”组成,并且这个“层”可以被其他映像重用(有点像前端组件或模块)。

如果拉另一个镜像,并且已经下载了一些“层”,那么dockerpull只会拉元数据,而不会重复拉“层”。

Docker的映像库使用内容寻址存储功能,映像ID由SHA256表示,作为其中包含的配置和“层”的汇总。我们来证明一下。因为我拉的是java:latest,也就是标签名为latest的镜像,所以我需要找到与latest版本相同但标签名不同的镜像(本质上是标签名不同的镜像)。我在DockerHub上找到了以下结果:

拉动标签名称为8-jdk的镜像:

$dockerpulljava:8-jdk 8-jdk:Pullingfromlibrary/java Digest:sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status:Downloadednewerimageforjava:8-jdk

很明显,这里的拉取中看不到“层”的信息,抽象的sha256值和名为latest的标签的镜像一模一样。本质上,这是两个一模一样的镜子,由同一个“层”组成,不需要再拉。

此时,你可能会有和我一样的疑问,“一模一样?”,是不是说 *** 作环境中只有一个?那么它是以谁的标签名命名的呢?让我们看看下面的输出:

$dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE java8-jdkd23bdf5b1b1b20monthsago643MB javalatestd23bdf5b1b1b20monthsago643MB

我们可以清楚地看到,当我们查看此时的所有镜像时,有标签名称为8-jdk和latest的镜像列在它们上面。java:8-jdk和java:latest的镜像ID是一样的,因为本质上确实是同一个镜像,只是用不同的标签标记。

因为镜像是完全相同的,所以它们的“层”只存储一次,不消耗额外的磁盘空空间,即运行环境中只有一个java镜像,这个镜像也可以用不同的标签进行标记。

有关镜像、“层”和内容寻址存储库的更多信息,请转到尚未开放的新pit,以深入分析Docker映像、“层”和存储驱动程序。

1.3抽象拉取

通过以上两种拉图方式,我们得到了一个sha256。

sha256:c1ff613E8ba25833D2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d

我们试着总结一下拉图的方法:

$dockerpulljava@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d:Pullingfromlibrary/java Digest:sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status:Imageisuptodateforjava@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d

摘要的镜像是最新的,因此不需要被提取。

$dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE java8-jdkd23bdf5b1b1b20monthsago643MB javalatestd23bdf5b1b1b20monthsago643MB

镜像列表保持不变。

这里有一个知识点需要提一下。摘要可以在Dockerfile中与FROM一起使用:

来自Java@sha256:c1ff613E8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d

维护者一些维护者maintainer@example.com

这种引用方式,由于具体总结,会把镜像固定到具体版本,不会更新。如果需要使用其他版本,需要更改摘要内容。

1.4从其他注册中心获取

重申一下,默认情况下,dockerpull从DockerHub中提取图像。当然,我们可以设置从其他注册表中提取图像:

$码头工人拉localregistry.example:6666/testing/test-image

这里需要注意的是,注册中心的URL不需要以http://或https://开头

1.5从同一个镜像库中一次提取多个镜像

使用dockerpull-a提取同一个镜像库中的所有镜像。

1.6取消拉动

取消拉取动作可以直接杀死拉取过程,在 *** 作界面Ctrl+C

2.dockertag

为源图像创建一个新标签。

docker标记SOURCE_IMAGE[:TAG]TARGET_IMAGE[:TAG]

镜像名称,由名称的每个组成部分用斜杠分隔而成,比如library/java。

用冒号分隔名称和标签,比如library/java:8-jdk。

我们还可以在图像名称前添加一些前缀,以表明图像来源是其他注册中心或私有注册中心,例如

localregistry.example:6666/library/java:8-jdk

2.1按名称标记引用的镜像

$docker标签javajava:byname

读者可以尝试一下docker标签javajava:byname和docker标签javalib/java:byname的异同。

2.2标记由ID引用的镜像

$docker标签d23bdf5b1b1bjava:byid

2.3通过名称和标签标记引用的镜像

$docker标签java:8-jdkjava:bynameandid

2.4标记私有注册表的图像

为了将镜像上传到私有注册表,您需要重命名镜像。规则是:

$docker标签Java:8-JDKlocalregistry.example:6666/library/java:8-jdk-v1

Dockerpull和dockertag是经常使用的命令。它们使用起来很简单,但是它们有很多技巧。读者可以自己实践和尝试。

附言

其实我和docker接触很久了。我是怎么想到写这个部分的?

写作的初衷是为了沉淀知识。一直以来,我的上级领导的要求就是快速应用技术,产生价值。那么理论研究,底层原理,甚至基本命令可能都不知道真正的含义,只能用。

就像驾校教学生驾驶技术(或者不教),却从来不教汽车的组成(结构)和运行机理(底层原理)。会不会手动换挡方向盘,脚踩离合油门刹车?够开吗?

那么为什么要沉淀呢?

第一,当别人问你一些命令和一些原理的时候,你不能支支吾吾的回答,因为你只记得如何通过指尖的肌肉来使用命令,更别说原理或者底子了;

第二,类比一下,从最初的前端菜鸟,到后来用SpringBoot架构写Java应用,再到现在学习使用Linuxcommand(shell),Docker和Go应用区块链框架HyperLedgerFabric进行生产,看似有一些跨度,但依然是同一个领域,人与机器的交流。我学会了用不同的语言和机器交流,就像一个生活在机器国家的外星人,会读会写。在机器世界的实践道路上,与HTML,CSS,JavaScript,我的启蒙开始渐行渐远。国庆前夕,我暂时写到这里。感觉自己是吸收了太多水分,接受了足够的光线的豆芽。越长越高。但是,越是纤细的地方,根越不茂盛,颈越不粗,越容易弯折。你要时刻鞭策自己,不抛弃初心,不忘本职工作,从前端学习更多有营养的内容,强化自己。

以上Docker拉镜和标签 *** 作pull|tag是边肖分享的所有内容。希望给大家一个参考,支持我们。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/774115.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存