本文主要介绍Docker的拉镜和标签 *** 作pull|tag,有很好的参考价值。希望对你有帮助。来和边肖一起看看吧。
翻看了一下Fabric项目的源代码,发现了Docker的一些内容,有很多东西我并没有完全理解。看了一下,看到用dockerpull拉Fabric图像,用dockertag重命名图像。稍微想了一下,发现虽然用了,但是不太懂,得过且过。现在我已经忘记如何使用它了...
1.dockerpull一般来说,从镜像源拉映像就是从DockerHub拉映像。
dockerpull[OPTIONS]NAME[:TAG|@DIGEST]
例如:
$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 javalatestd23bdf5b1b1b20monthsago643MB1.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是边肖分享的所有内容。希望给大家一个参考,支持我们。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)