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

 更新时间:2020年11月22日 11:10  点击:1616

重翻Fabric项目的源码,发现Docker部分内容,有很多不尽理解的地方,看着看着,就看到使用docker pull拉取Fabric镜像及使用docker tag为镜像重命名,稍作思虑,发现虽然使用过,却未求甚解,得过且过,如今已经忘了如何运用……

1. docker pull

从镜像源拉取镜像,一般来说是从Docker Hub拉取镜像(image)

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

选项,简写 默认 描述
–all-tags , -a 从镜像库拉取所有tag标签名的镜像
–disable-content-trust true 忽略镜像校验

比如:

$ docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG

Options:
# -a  拉取所有不同标签的镜像
 -a, --all-tags    Download all tagged images in the repository
#  忽略镜像校验,默认项
  --disable-content-trust Skip image verification (default true)

我们实际操作一下看看,操作环境是常用的Ubuntu16.04

1.1 普通拉取

实际上我们可以直接拉取该镜像的最新版,默认拉取tag为latest的镜像

比如:

#拉取了java的镜像,tag为latest
$ docker pull java
Using default tag: latest
latest: Pulling from library/java
5040bd298390: Pull complete 
fce5728aad85: Pull complete 
76610ec20bf5: Pull complete 
60170fec2151: Pull complete 
e98f73de8f0d: Pull complete 
11f7af24ed9c: Pull complete 
49e2d6393f32: Pull complete 
bb9cdec9c7f3: Pull complete 
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:latest

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

$ docker images

REPOSITORY   TAG     IMAGE ID   CREATED    SIZE

java    latest    d23bdf5b1b1b  20 months ago  643MB

1.2 tag标签名拉取

从上述输出内容,我们可以发现,虽然只拉取了一个java镜像,但是拉取过程中,却有多个Pull complete,5040bd298390和fce5728aad85等8个,这是因为镜像可以由多“层”(layers)组成,而这种“层”可以被其他的镜像复用(有点像前端的组件或模块),从而组成新镜像。

如果拉取另一个镜像,其中某些“层”已经下载过,那么docker pull则只会拉取元数据,而不会重复拉取“层”。

Docker的镜像库使用了内容寻址储存功能,而镜像ID是由SHA256作为摘要代表了其中包含的配置及“层”,下面我们来证明一下,因为我拉取的是java:latest,即tag名为latest的镜像,所以我需要找到和latest同版不同tag名的镜像(本质上是一个镜像,只是标签名不一样),在Docker Hub上搜到如下结果:

拉取tag名为8-jdk的镜像:

$ docker pull java:8-jdk
8-jdk: Pulling from library/java
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8-jdk

很明显,此处的拉取没有看到“层”的信息,且摘要的sha256值也与tag名为latest的镜像完全一样,本质上这是完全相同的两个镜像,由相同的“层”组成,所以不需要再次拉取了。

此时,你们也许会和我产生相同的疑问,“完全相同?”,那是不是代表他们在操作环境中只存在一个?那么又用谁的tag名来命名呢?我们来看如下输出:

$ docker images
REPOSITORY   TAG     IMAGE ID   CREATED    SIZE
java    8-jdk    d23bdf5b1b1b  20 months ago  643MB
java    latest    d23bdf5b1b1b  20 months ago  643MB

我们可以清楚的看到,此时查看所有镜像,有tag名分别为8-jdk和latest的镜像罗列其上,java:8-jdk和 java:latest拥有相同的image ID,因为本质上他们确实是 同一镜像 ,只是由 不同标签 所标记。

由于镜像完全相同,则他们的“层”只储存一次,且不会消耗额外的磁盘空间,即操作环境中只存在一个java镜像,也可以用不同的tag标记这个镜像。

更多关于镜像,“层”,内容寻址存储库的信息,请移步还未开的新坑深度解析Docker镜像,“层”和存储驱动

1.3 摘要拉取

通过上述两种拉取镜像的方式,我们获得了一个sha256

sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d

我们下面尝试摘要拉取镜像的方法:

$ docker pull java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d: Pulling from library/java
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Image is up to date for java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d

该摘要的镜像,已经是最新,不需要拉取。

$ docker images
REPOSITORY   TAG     IMAGE ID   CREATED    SIZE
java    8-jdk    d23bdf5b1b1b  20 months ago  643MB
java    latest    d23bdf5b1b1b  20 months ago  643MB

镜像列表毫无变动。

这里需要提及一个知识点,摘要可以在Dockerfile中配合FROM使用:

FROM java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d

MAINTAINER some maintainer <maintainer@example.com>

这种引用方式,由于特定摘要,会将镜像固定为特定的版本,且不会更新,如需要使用其他版本,则需要变更摘要内容

1.4 从其他注册中心拉取

重申,默认情况下,docker pull从Docker Hub拉取镜像。当然,我们可以设置从其他注册中心拉取镜像:

$ docker pull localregistry.example:6666/testing/test-image

此处需要注意,注册中心的URL前不需要加http://或https://

1.5 从同一镜像库,一次拉取多个镜像

使用docker pull -a 则可以拉取同一镜像库中所有镜像。

1.6 取消拉取

取消拉取动作可以杀死拉取进程,直接在操作界面CTRL+c。

2. docker tag

给源镜像创建一个新的tag

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

镜像名,是由斜杠分割的每一个name组成部分构成的,如library/java。

用冒号分割name和tag,如library/java:8-jdk。

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

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

2.1 给Name引用的镜像加标签

$ docker tag java java:byname

读者们可以自行尝试docker tag java java:byname和docker tag java lib/java:byname有何异同

2.2 给ID引用的镜像加标签

$ docker tag d23bdf5b1b1b java:byid

2.3 给Name和Tag引用的镜像加标签

$ docker tag java:8-jdk java:bynameandid

2.4 给私有注册中心的镜像加标签

为了将镜像上传到私有注册中心,需要给镜像重命名,规则为:

$ docker tag java:8-jdk localregistry.example:6666/library/java:8-jdk-v1

docker pull和 docker tag是使用频率颇高的命令,使用方法简单,却有很多技巧,读者们可以自行练习、尝试。

后记

其实接触docker也很久了,怎么想到写这部分的内容呢?

下笔的初衷,是为求知识的沉淀,一直以来,上级领导对我的要求是快速应用技术,产生价值,那么理论研究,底层原理,甚至基础的命令,可能都不知真意,仅仅是能用,会用。

就像驾校教会学员驾驶技术(也可能没教会),却未曾教授汽车的组成(架构),运作机制(底层原理)。手会挂挡转方向盘,脚会踩离合油门刹车,是不是也就够了,会开车了。

那么为什么要沉淀?

其一,当有人问你,一些命令,一些原理的时候,你支支吾吾无法作答,因为你只是通过指尖的肌肉记忆了命令的使用方法,更遑论原理或底层;

其二,触类旁通,从最初的前端菜鸟,到后来的使用Spring Boot架构写Java应用,再到现在学习使用Linux命令(shell)、Docker、Go来应用区块链框架 HyperLedger Fabric 做生产,看似有些跨度,然而还是一个相同的领域,人与机器之间的交流。我学会的是用不同的语种去和会各种机器语言的机器去交流,就像一个活在机器国度的异族,会读,会写。在机器世界的践行之路上,与一开始的HTML,CSS,JavaScript,我的启蒙,渐行渐远。正值国庆前夕,暂且写在这里,感觉自己就是一颗过度吸水和接受充分光照的豆芽,越长越高,然而越高的地方越是纤细,根部不够繁茂,颈部不够粗壮,越是易弯易折。应当时刻鞭策自己,不弃初心,不忘本职,汲取前端更有营养的内容,强壮己身。

以上这篇Docker 拉取镜像及标签操作 pull | tag就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持猪先飞。

[!--infotagslink--]

相关文章

  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • docker 启动elasticsearch镜像,挂载目录后报错的解决

    这篇文章主要介绍了docker 启动 elasticsearch镜像,挂载目录后报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-20
  • 解决Docker中的error during connect异常情况

    这篇文章主要介绍了解决Docker中的error during connect异常情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-22
  • C# 如何设置label(标签)控件的背景颜色为透明

    这篇文章主要介绍了C# 如何设置label(标签)控件的背景颜色为透明,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
  • matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())

    这篇文章主要介绍了matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • C#删除UL LI中指定标签里文字的方法

    这篇文章主要介绍了C#删除UL LI中指定标签里文字的方法,涉及C#针对页面HTML元素进行正则匹配与替换的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • docker部署confluence的完整步骤

    这篇文章主要介绍了docker部署confluence的完整步骤,这里的镜像并不是小编自己写的是基于他人打包的文中有详细介绍,需要的朋友可以参考下...2021-06-11
  • 帝国CMS用灵动标签调用实现各种幻灯(焦点图)效果

    用灵动标签(e:loop)可以实现各种幻灯效果,本节讲解制作幻灯的基本方法。 如本站JS焦点图频道里的大部分幻灯图片效果都可以用灵动标签调用的。 ...2015-12-30
  • 解决docker挂载的目录无法读写问题

    这篇文章主要介绍了解决docker挂载的目录无法读写问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-19
  • JS创建Tag标签的方法详解

    这篇文章主要介绍了JS创建Tag标签的方法,结合具体实例形式分析了javascript动态操作页面HTML元素实现tag标签功能的步骤与相关操作技巧,需要的朋友可以参考下...2017-06-15
  • 教你使用Portainer管理多台Docker容器环境的方法

    这篇文章主要介绍了Portainer管理多台Docker容器环境,本文给大家介绍的非常详细,包括环境准备及管理docker的详细过程,需要的朋友可以参考下...2021-11-11
  • docker swarm外部验证负载均衡时不生效的解决方案

    这篇文章主要介绍了docker swarm外部验证负载均衡时不生效的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-27
  • docker端口映射及外部无法访问问题

    这篇文章主要介绍了docker端口映射及外部无法访问问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-19
  • 帝国CMS灵动标签调用新闻正文内容第一张图片的方法

    有时候我们在建站的过程当中需要调用内容页中正文的第一张图片(并不是缩略图),这样就会无从下手,但其实对不懂开发的站长是太难了,往往是会用标题图片来取代,下面分享网友们贡献出...2015-12-30
  • 探讨JavaScript标签位置的存放与功能有无关系

    在网页中,我们可以将JavaScript代码放在html文件中任何位置,但一般放在head或body标签里面。一般来说,<script>元素放在哪里与其的功能作用是紧密相关的,通过本文我们一起学习下...2016-01-18
  • Docker 解决openjdk容器里无法使用JDK的jmap等命令问题

    这篇文章主要介绍了Docker 解决openjdk容器里无法使用JDK的jmap等命令问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-04
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • jquery实现标签支持图文排列带上下箭头按钮的选项卡

    带上下箭头jquery垂直tab选项卡切换标签,技持左侧列表上下滚动,滚动到底部带信息提示。复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml...2015-03-15
  • 基于mybatis中<include>标签的作用说明

    这篇文章主要介绍了基于mybatis中<include>标签的作用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-20
  • C#使用正则表达式过滤html标签

    最近在开发一个项目,其中有需求要求我们把一段html转换为一般文本返回,使用正则表达式是明智的选择,下面小编给介绍下C#使用正则表达式过滤html标签,需要的朋友参考下...2020-06-25