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-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就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • docker 启动elasticsearch镜像,挂载目录后报错的解决

    从docker hub下载了一个es的镜像,版本为6.4.2,详细信息如下: 比较重要的就是这两条,第一个是工作目录,挂载目录也需要和这里对应:第二个是启动命令,这里是指定了一个预先写好的启动脚本.所以我启动了一个空容器去查看了下容器内的情况: 容器内部目录结构如上图,data是用来存放数据,logs用来存放日志. 接着查看下启动脚本 /usr/local/bin/docker-entrypoint.sh 前半部分我也是看的一知半解,不过真正和挂载目录相关的是最后这部分,这里处理了挂载目录后的操

  • 解决docker加载新的镜像后repository和tag名称都为none的问题

    可以使用命令: docker tag [image id] [name]:[版本] 例如: docker tag b03b74b01d97 docker-redis:0.0.1 补充知识:docker的save和load 我就废话不多说了,大家还是直接看代码吧~ 实战 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE clearlinux latest 32685d114002 7 days ago 62

  • docker实现重新打tag并删除原tag的镜像

    docker镜像id是唯一的,可以物理性的标明一个镜像,repository:tag可以有多个,但是也不会重复,也是唯一的. 要重新打tag的话,语法是: docker tag imageId repository:newTag 比如将这个centos:7重新打tag为centos7:base 此时仓库中有两个镜像,镜像id相同,只是多了一个tag标签,也就是多了一个引用.删除不需要的引用即可,删除时必须用tag删除,用镜像id删除会物理性的删除镜像,这两个引用会同时被删除掉. 当然,打tag的

  • 在docker下删除两个id相同的镜像的操作

    今天建立docker容器的时候由于疏忽,镜像的名字输错了,结果容器创建成功后,镜像中出现两个id相同的: 使用docker rmi e4a35914679d删除的时候执行失败: Error response from daemon: conflict: unable to delete e4a35914679d (must be forced) - image is referenced in one or more repositories 提示应该是该id有两个本地文件,不能用id删除. 所

  • 解决docker run 或者 docker restart 启动镜像就自动退出

    执行命令:docker run --name centos8 -d centos /bin/bash,通过docker ps查看正在运行中容器,找不到centos8. 通过docker ps -a查看发现,centos8容器已经处于停止状态了 [root@MiWiFi-R4A-srv server]$ docker run --name centos8 -d centos /bin/bash a770630ca865b3c3346a321a383f302ed22af9281be8482f4f4d

  • Docker 制作镜像Dockerfile和commit操作

    构建镜像 构建镜像主要有两种方式: 使用docker commit命令从运行中的容器提交为镜像: 使用docker build命令从 Dockerfile 构建镜像. 首先介绍下如何从运行中的容器提交为镜像.我依旧使用 busybox 镜像举例,使用以下命令创建一个名为 busybox 的容器并进入 busybox 容器. $ docker run --rm --name=busybox -it busybox sh 执行完上面的命令后,当前窗口会启动一个 busybox 容器并且进入容器中.在

  • docker镜像导入导出备份迁移的操作

    导出: docker save -o centos.tar centos:latest #将centos:latest镜像导出为centos.tar文件 导入: docker load -i centos.tar #加载centos.tar,加载后的镜像各标签与原导出的镜像标签相同 补充知识:docker将镜像保存为tar文件 将单个文件保存为tar文件,并加载到本地 docker save ****.v1 > images.tar docker load < images.tar 将多个文件

  • 利用nexus作为私库进行代理docker,进行上传和下载镜像操作

    一.nexus的配置 1.创建docker proxy 用于从外网仓库中拉取镜像至本地仓库中. 点击"create Repository",选择docker(proxy)进行创建 填写参数 点击"create repository" 创建 2.创建docker hosted 用于将自己的镜像上传至私库 点击"create Repository",选择docker(hosted)进行创建 填写参数: 点击"create repositor

  • 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 从镜像库

  • Docker拉取镜像的完整步骤

    1. docker pull 拉取镜像 使用 $ docker pull {IMAGE_NAME} 拉取镜像时,有两种情况: IMAGE_NAME 第一个斜杠之前有域名标识 Docker 会将 IMAGE_NAME 识别为带域名的镜像.例如,myregistry.io/space1/image1:latest ,Docker 会去 myregistry.io 指向的服务器请求镜像数据.一个 Docker 镜像分为很多层,如果本地存在该层,则不会再次拉取. IMAGE_NAME 第一个斜杠之前没有

  • docker拉取镜像查看版本的方法步骤

    要想查看镜像的版本好TAG,需要在docker hub查看 地址如下:https://hub.docker.com 进入之后,在页面左上角搜索框搜索 以nginx为例: 搜索完成如下: 点击进入详情 点击标签 选择自己想要拉取的标签 即可 例如 拉取标签为1.15.5的nginx镜像 # docker pull nginx:1.15.5 1.15.5: Pulling from library/nginx f17d81b4b692: Pull complete d5c237920c39: Pul

  • Docker 拉取 oracle 11g镜像配置的详细教程

    话不多说 开始记录docker拉取阿里的oracle11g 镜像并进行配置, 用pl/sql 可以登录为最终结果 navicat连接是在最后一步 参考:https://www.jb51.net/article/223375.htm 但是根据这个进行配置会有一些问题,所以写这篇记录一下,希望可以帮助其他人 开始: ①.开始拉取镜像-执行命令: docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 下载的过程少长,等待吧,喝

  • 解决docker拉取mysql镜像太慢的情况

    docker拉取mysql镜像半个小时依然没有成功,改用阿里云镜像加速器. 1.进入阿里云平台 链接: 阿里云控制台,镜像搜索mysql 复制加速器链接 2.进入虚拟机修改docker配置 vim /etc/docker/daemon.json 编辑代码 { "registry-mirrors": ["https://nsodgxr5.mirror.aliyuncs.com"] } 重启docker sudo systemctl daemon-reload sudo

  • 解析Docker 下拉取oracle 11g镜像配置的问题

    1.拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 镜像详情:https://dev.aliyun.com/detail.html?spm=5176.1972343.2.8.E6Cbr1&repoId=1969 由于镜像我已经拉取,所以此处显示已存在,查看镜像信息 docker iamges 2.创建并容器信息 docker run -d -p 1521:1521 --name oracle_11g re

  • docker镜像的拉取登陆上传及保存等相关使用命令

    目录 docker 中的三大基本概念 镜像 容器 仓库 docker 镜像相关命令 常用镜像仓库 搜索镜像 拉取镜像 查看当前系统上的有哪些镜像 获取镜像的详细信息 登录镜像仓库 为镜像标签 镜像上传 镜像的删除 清空镜像 查看镜像历史(镜像的构建历史) 保存镜像(commit) 保存镜像(import/export) 保存镜像(save/load) 保存镜像三种方式的区别 docker 中的三大基本概念 镜像 镜像就是启动一个容器的模板. 容器 容器就是对外提供服务的进程.或者容器就是镜像启动

  • 详解docker国内镜像拉取和镜像加速registry-mirrors配置修改

    由于国内访问直接访问Docker hub网速比较慢,拉取镜像的时间就会比较长.一般我们会使用镜像加速或者直接从国内的一些平台镜像仓库上拉取. 我比较常用的是网易的镜像中心和daocloud镜像市场. 网易镜像中心:https://c.163.com/hub#/m/home/ daocloud镜像市场:https://hub.daocloud.io/ 我们可以先查看下自己的镜像,使用命令: [root@localhost docker]# docker images [root@localhost

  • docker创建私有镜像仓库搭建教程

    我的环境相关设置如下 环境:centos7 IP地址:10.211.55.30 dockere版本:1.10.3 镜像仓库:v2 首先在10.211.55.30机器上下载registry镜像 $ docker pull registry 也可以进行镜像导入的方法进行离线的安装.可以去我的网盘中下载:https://pan.baidu.com/s/1jHZlz2u 然后进入Docker中进行导入 $ docker load -i registry.tar 下载完之后我们通过该镜像启动一个容器 $

  • Docker上传镜像至私有仓库的方法示例

    镜像可以很方便直接 push 到 docker 的公共仓库,就好像 github 一样,但是我们在开发中很多时候都不想公开镜像文件,这时就需要搭建 docker 的私有仓库,就好像 gitlab 一样. 在 上一篇 构建出镜像后,我们可以部署一个私有镜像仓库用来存放我们的镜像. 启动私有 Registry 启动一个私有仓库也非常简单,在服务器上执行命令 复制代码 代码如下: docker run -d -p 5000:5000 --name="docker-registry" --re

随机推荐