Docker核心概念之镜像

          Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试先从默认镜像仓库下载,用户也可以通过配置,使用自定义的镜像仓库。

1.1搜寻镜像

      使用docker search命令可以搜索Docker Hub官方仓库中的镜像。语法为docker search [option] keyword。支持的命令选项主要包括:

      -f  ,--filter      filter:过滤输出内容;

      --format string :格式化输出内容;

      --limit   int:限制输出结果的个数,默认为25个;

      --no-trunk  :不截断输出结果

      例如,搜索官方提供的带nginx关键字的镜像,如下图

1.2 获取镜像

       镜像是运行容器的前提,官方的Docker Hub网站已经提供了数十万个镜像供我们开放
下载。可以使用docker pull 镜像名字   命今,直接从Docker Hub镜像源来下载镜像。该命
令的格式为docker pull NAME[:TAG]。
       其中,NAME是镜像仓库名称(用来区分镜像),TAG是镜像的标签(往往用来表示版本
信息)。通常情况下,描述一个镜像需要包括“名称+标签”信息。
       例如,获取一个Ubuntu18.04系统的基础镜像可以使用如下的命令:
 

       对于Docker镜像来说,如果不显式指定Tag,则默认会选择latest标签,这会下载仓库中最新版本的镜像。

       下载过程中可以看出,镜像文件一般由若干层(layer)组成,5a214d77f5d7这样的串是层的唯一id(实际上完整的id包括256比特,64个十六进制字符组成)。使用docker  pull命令下载中会获取并输出镜像的各层信息。当不同的镜像包括相同的层时,本地仅存储了层的一份内容,减小了存储空间。

1.3  查看镜像信息

        Docker镜像相关的查询命令有ls,tag,和inspect等子命令。

        1.  使用images命令列出镜像
         使用docker  images或docker image ls命令可以列出本地主机上已有镜像的基本信息
例如,下面的命令列出我的本地主机镜像信息:

           在列出信息中,可以看到几个字段信息:
           REPOSITORY:表示来自于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像;
           TAG:表示镜像的标签信息,比如18.04、latest表示不同的版本信息。标签只是标记,并不能标识镜像内容;
           IMAGE ID:表示镜像的ID(唯一标识镜像),如果两个镜像的D相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已;
           CREATED:表示创建时间,说明镜像最后的更新时间;
           SIZE:表示镜像大小,优秀的镜像往往体积都较小。

            其中能镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使
用该ID的前若干个字符组成的可区分串来替代完整的ID。
            TAG信息用于标记来自同一个仓库的不同镜像。例如ubuntu仓库中有多个镜像,通过
TAG信息来区分发行版本,如18.04、18.10等。
            镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存
储一份,物理上占用的存储空间会小于各镜像逻辑体积之和。

             image子命令主要支持如下选项:

              -a  :列出所有(包括临时文件)镜像文件,默认为否;

              --digests=true/false:列出镜像的数字摘要值,默认为否;

             -f ,  --filter=[ ] :过滤列出的镜像,如dangling=true只显示没有被使用的
镜像;也可指定带有特定标注的镜像等;

             --format=“TEMPLATE”:控制输出格式,如.ID代表ID信息,.Repository
代表仓库信息等;
             --no-trunc=true/false:对输出结果中太长的部分是否进行截断,如镜像的ID
信息,默认为是;
            -q,  --quiet=true/false:仅输出ID信息,默认为否。
          更多子命令选项还可以通过man docker-images来查看。

          2.使用tag命令添加镜像标签
          为了方便在后续工作中使用特定镜像,还可以使用docker  tag命令来为本地镜像任
意添如新的标签,例如,添加一个新的my_ubuntu:latest镜像标签,再次使用docker images列出本地主机上镜像信息,可以看到多了一个my_ubuntu:latest标签的镜像。

            3.  使用inspect命令查看详细信息

            使用docke inspect  + 镜像名:tag   命令可以获取该镜像的详细信息,包括制作者,适应
架构、各层的数字摘要等:

           上面代码返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用-f来指定,例如,获取镜像的Architecture:

          4. 使用history命令查看镜像历史
           既然镜像文件由多个层组成,那么怎么知道各个层的具体内容是什么呢?这时候可以使用history子命令,该命今将列出各层的创建信息。
           例如,查看ubuntu:18.04镜像的创建过程,可以使用如下命今:

1.4  删除和清理镜像

         1.使用标签删除镜像
          使用docker rmi或docker image rm命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID,支持选项包括:
           -f,-force:强制删除镜像,即使有容器依赖它;
           -no-prune:不要清理未带标签的父镜像;
           例如,要删除掉my_ubuntu:latest镜像,可以使用如下命令:

          当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定
标签而已,并不影响镜像文件。因此上述操作相当于只是删除了镜像5a214d77f5d7的一个标签副本而已。但当镜像只剩下一个标签的时候就要小心了,此时再使用docker rmi命令会彻底删除镜像。

          2.使用镜像ID来删除镜像
          当使用docker rmi 命令,并且后面跟上镜像的ID(也可以是能进行区分的部分ID串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

            注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的、例如:先利用
ubuntu:18.04镜像来创建一个简单的容器输出一段话:

           使用docker ps -a  命令可以看到本机上存在的所有容器:

           可以看到,后台存在一个退出状态的容器,是刚基于ubuntu:18.04镜像创建的。试图删除该镜像,Docker会提示有容器正在使用它指定的镜像,无法删除:

           如果要想强行别除镜像,可以使用-f 参数;

           注意,通常并不推荐使用-f 参数来强制删除一个存在容器依赖的镜像。正确的做法是先删除依赖该镜像的所有容器,再来删除镜像。

           首先删除客器:
           docker rm d297e9a067a7
           然后使用ID来删除镜像,此时会正常打印出删除的各层信息:

          3,清理镜像
          使用ID红一段时间后,系统中可能会遗留一些临时的镜像文件.以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。

           支持选项包括:
            -a,-all:删除所有无用镜像,不光是临时镜像;

             -filter filter: 只清理符合给定过滤器的镜像;

             -force: 强制删除镜像,而不进行提示确认。

1.5 创建镜像

         创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导人、基于
Dockerfile创建。

         1.docker [container] commit [OPTIONS] CONTAINER [REPOSITORY] [:TAG]

          2.docker [image] import [OPTIONS] file |URL|-[REPOSITORY] [:tag]

           3.docker [image] build

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值