Docker 拉取镜像及标签 pull | tag

2023-05-16

Docker 拉取镜像及标签 pull | tag

重翻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-trusttrue忽略镜像校验

比如:

$ 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,5040bd298390fce5728aad85等8个,这是因为镜像可以由多“层”(layers)组成,而这种“层”可以被其他的镜像复用(有点像前端的组件或模块),从而组成新镜像。
如果拉取另一个镜像,其中某些“层”已经下载过,那么docker pull则只会拉取元数据,而不会重复拉取“层”。
Docker的镜像库使用了内容寻址储存功能,而镜像ID是由SHA256作为摘要代表了其中包含的配置及“层”,下面我们来证明一下,因为我拉取的是java:latest,即tag名为latest的镜像,所以我需要找到和latest同版不同tag名的镜像(本质上是一个镜像,只是标签名不一样),在Docker Hub上搜到如下结果:
不同的tag可以拉取相同镜像

拉取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-jdkjava: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:bynamedocker 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 pulldocker tag是使用频率颇高的命令,使用方法简单,却有很多技巧,读者们可以自行练习、尝试。

后记

其实接触docker也很久了,怎么想到写这部分的内容呢?
下笔的初衷,是为求知识的沉淀,一直以来,上级领导对我的要求是快速应用技术,产生价值,那么理论研究,底层原理,甚至基础的命令,可能都不知真意,仅仅是能用,会用。
就像驾校教会学员驾驶技术(也可能没教会),却未曾教授汽车的组成(架构),运作机制(底层原理)。手会挂挡转方向盘,脚会踩离合油门刹车,是不是也就够了,会开车了。
那么为什么要沉淀?
其一,当有人问你,一些命令,一些原理的时候,你支支吾吾无法作答,因为你只是通过指尖的肌肉记忆了命令的使用方法,更遑论原理或底层;
其二,触类旁通,从最初的前端菜鸟,到后来的使用Spring Boot架构写Java应用,再到现在学习使用Linux命令(shell)、Docker、Go来应用区块链框架 HyperLedger Fabric 做生产,看似有些跨度,然而还是一个相同的领域,人与机器之间的交流。我学会的是用不同的语种去和会各种机器语言的机器去交流,就像一个活在机器国度的异族,会读,会写。在机器世界的践行之路上,与一开始的HTML,CSS,JavaScript,我的启蒙,渐行渐远。正值国庆前夕,暂且写在这里,感觉自己就是一颗过度吸水和接受充分光照的豆芽,越长越高,然而越高的地方越是纤细,根部不够繁茂,颈部不够粗壮,越是易弯易折。应当时刻鞭策自己,不弃初心,不忘本职,汲取前端更有营养的内容,强壮己身。
总之,会在工作生活之余,多多抽出闲余,沉淀前端的内容,暂记,可期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 拉取镜像及标签 pull | tag 的相关文章

随机推荐

  • db封装

    db封装 以下Connection类封装支持以下几个特性 1 参数绑定防止sql注入2 读写分离3 多主多从 xff0c 多节点负载均衡4 故障自动摘除及自动恢复 代码实现 span class token delimiter import
  • 数据结构

    1 数据结构 提到算法不能不提数据结构 xff0c 数据结构就是数据元素按照一种或多种关系的集合 xff0c 按照逻辑结构划分 xff0c 可以分为 xff1a 1 1 集合 集合是由一堆无序的 相关联的 xff0c 且不重复的数据元素组成
  • 数据切分——Atlas介绍

    Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 它在MySQL官方推出的MySQL Proxy 0 8 2版本的基础上 xff0c 修改了大量bug xff0c 添加了很多功能
  • Nginx负载均衡:分布式/热备Web Server的搭建

    Nginx是一款轻量级的Web 服务器 反向代理服务器 及电子邮件 xff08 IMAP POP3 xff09 代理服务器 xff0c 并在一个BSD like 协议下发行 由俄罗斯的程序设计师Igor Sysoev所开发 xff0c 供俄
  • 数据切分——Atlas读写分离Mysql集群的搭建

    关于数据切分的原理可以参见博客 xff1a http blog csdn net jhq0113 article details 44226789 关于Atlas的介绍可以参见博客 xff1a http blog csdn net jhq0
  • k8s 官方文档

    k8s 官方文档 https kubernetes io zh docs home
  • 数据切分——Mysql分区表的建立及性能分析

    Mysql的安装方法可以参考 xff1a http blog csdn net jhq0113 article details 43812895 Mysql分区表的介绍可以参考 xff1a http blog csdn net jhq011
  • 利用C++求解一元二次方程

    题目 xff1a 求解一元二次方程 xff1a ax 43 bx 43 c 61 0 的解 xff0c 其中a 61 1 b 61 3 c 61 2 分析 xff1a 大家都知道一元二次方程的解有三种情况 xff0c 即考虑 61 xff0
  • VS2019配置BOOST-v1.70.0库

    文章目录 vs2019配置c 43 43 boost库安装编译Boost c 43 43 library新建vs2019 c 43 43 项目 xff0c 并添加boost依赖库代码测试 c 43 43 boost库说明主要分类常用库相关图
  • sudo aptitude install sudo apt-get update sudo apt-get install libatlas-dev

    记坑 xff1a sudo apt get update 报错 xff1a 没有公钥 xff0c 解决办法 xff1a sudo apt key adv keyserver keyserver ubuntu com recv keys 13
  • 深度学习综述之分类(适合深度学习面试者看)

    目前图像方向 xff0c 主要用深度学习进行分类 xff0c 定位 xff08 回归 xff09 xff0c 检测 xff0c 那么她三主要区别是什么呢 xff1f 分类 xff1a 是什么 xff1f 定位 xff1a 在哪里 xff1f
  • tf变换及工具说明(1)

    tf变换及工具说明 xff08 1 xff09 xff09 tf说明解释tf 库常用方法tf数据类型静态tf发布tf动态发布tf接收坐标转换平面坐标系例子 坐标转换传递 tf说明解释 在ros下有一个库 xff1a tf xff0c 其主要
  • Python实现微信自动回复(机器人版本)

    现在微信使用程度越来越高 xff0c 就想到能不能微信实现像qq似得自动回复功能 在实现的过程中发现 xff0c 图灵机器人也有微信的接口 xff0c 就拿来用了 机器人创建完成后 xff0c 会生成一个APIkey xff0c 用来和程序
  • PPTV面试题——括号消除

    题目 xff1a 给定一个字符串 xff0c 设计一个算法消除其中承兑的括号 xff0c 如果括号不成对 xff0c 提示异常 xff08 error xff09 如 xff08 1 xff0c xff08 2 3 xff09 xff0c
  • reStructuredText(rst)简介+安装+简单说明

    reStructuredText简介 43 安装 43 简单说明 reStructuredText是什么 reStructuredText是扩展名为 rst的纯文本文件 xff0c 含义为 重新构建的文本 xff0c 是python编程语言
  • 【VS Code】"The 'clang-format' command is not available. Please check your clang-format."报错

    文章目录 34 The 39 clang format 39 command is not available 34 报错说明一 安装插件 clang format 二 解决方案三 参考链接 34 The clang format comm
  • 大环境不好,找工作太难?看我历时10天三面阿里,成功入职...

    三面大概九十分钟 xff0c 问的东西很全面 xff0c 需要做充足准备 xff0c 就是除了概念以外问的有点懵逼了 xff08 呜呜呜 xff09 回来之后把这些题目做了一个分类并整理出答案 xff08 强迫症的我狂补知识 xff09 分
  • Ubuntu18.04 远程命令行下安装并启动x11vnc

    最近做项目需要连接ubuntu的图像界面 xff0c 开始用XQuartZ xff0c 界面太low太丑 xff0c 而且有些应用启动不了 xff1b 后来转到使用x11vnc xff0c 在网络上查看了很多交安装x11vnc的方法 xff
  • CMakeLists.txt编写常用命令

    文章目录 一 设置cmake最小版本二 设置项目名称三 设置编译目标类型四 指定编译包含的源文件1 明确指明包含的源文件2 搜索指定目录的所有的cpp文件3 自定义搜索规则4 包含多个文件夹里的文件 五 设置包含目录六 设置链接库搜索目录七
  • Docker 拉取镜像及标签 pull | tag

    Docker 拉取镜像及标签 pull tag 重翻Fabric项目的源码 xff0c 发现Docker部分内容 xff0c 有很多不尽理解的地方 xff0c 看着看着 xff0c 就看到使用docker pull拉取Fabric镜像及使用