Docker 获取镜像、查看镜像、删除和清理镜像(二)

Docker 获取镜像、查看镜像、删除和清理镜像(二)

Scroll Down

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

1. 获取镜像

镜像是运行容器的前提,官方的 Docker Hub 网站已经提供了数十万个镜像供大家开放下载。

可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。

docker [image] pull NAME [:TAG] 

       -a  --all-tags            #拉取所有 tagged 镜像
       --disable-content-trust   #忽略镜像的校验,默认开启
       -q, --quiet               #禁止详细输出

其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本信息)。 通常情况下, 描述 一 个镜像需要包括“名称+标签”信息。

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

在比如 我们拉取仓库最新的ubuntu 18.04 镜像

下面四个命令效果是一样的!

docker pull ubuntu
docker pull ubuntu:latest
docker pull ubuntu:18.04
docker pull registry.hub.docker.com/ubuntu:18.04

image.png

拉取一个或多个镜像使用docker pull,如果没有指定镜像标签,docker默认使用:latest,下面的示例命令就会拉取最新的镜像文件,等同于:docker pull debian:latest,默认的注册服务器是registry.hub.docker.com。

2. 检索仓库镜像

要检索仓库中的镜像,需要使用docker search 命令

docker search [OPTIONS] TERM

           --automated		不推荐使用:仅显示自动构建
           --filter , -f	根据提供的条件过滤输出
           --format		使用Go模板进行漂亮的打印搜索
           --limit	25	最多搜索结果(默认:25)
           --no-trunc		不要截断输出
           --stars , -s		不推荐使用:只显示至少x个的星标

命令只能查看软件这一层次,如果需要查看软件版本就只能像其他办法了!因为这个命令查看不到tag信息。

image.png

3. 查看镜像信息

3.1 查看镜像

docker images 和 docker image ls 是一样的。

image.png

上图中的字段信息:

REPOSITORY:来自于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像;

  • TAG:镜像的标签信息,比如18.04、latest表示不同的版本信息。标签只是标记,并不能标识镜像内容;
  • IMAGE ID:镜像的ID(唯一标识镜像),如果两个镜像的ID相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已;
  • CREATED:创建时间,说明镜像最后的更新时间;
  • SIZE:口镜像大小,优秀的镜像往往体积都较小。

其中镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使用该ID的前若干个字符组成的可区分串来替代完整的ID。

TAG信息用于标记来自同一个仓库的不同镜像。例如ubuntu仓库中有多个镜像,通过TAG信息来区分发行版本,如18.04、18.10等。

镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像逻辑体积之和。

docker images 

    -a,--all=true|false:列出所有(包括临时文件)镜像文件,默认为否;
        --digests=true|false:列出镜像的数字摘要值,默认为否;
    -f,--filter=[]:过滤列出的镜像,如dangling=true只显示没有被使用的镜像;也可指定带有特定标注的镜像等;
        --format="TEMPLATE":控制输出格式,如.ID代表ID信息,.Repository代表仓库信息等;
        --no-trunc=truelfalse:对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是;
    -q,--quiet=truelfalse:仅输出ID信息,默认为否。

3.2 查看镜像详细信息

查看镜像详细的信息需要使用

docker image inspect 镜像名称     #镜像名称需要详细的tag

image.png

3.3 查看镜像历史

既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用history子命令,该命令将列出各层的创建信息。

例如,查看ubuntu:18.04镜像的创建过程,可以使用如下命令:

image.png

查看信息字段的CREATED BY 字段只是截取了一部分,需要详细的需要加上 --no-trunc 参数,就可以看到完整信息!

3.4 给镜像添加个性标签

为了区分多个镜像,可以给镜像添加自己的标签,用于区别!
这时候就需要使用tag命令:

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

我给ubuntu的镜像添加 zabbx 标签,使用如下

docker tag ubuntu:18.04 myubuntu:zabbx

image.png

从上图我们可以看到:首先多了一个镜像,然后新创建的镜像myubuntu:zabbx和原来的ubuntu:18.04的IMAGE ID是一模一样的!

它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添加的标签实际上起到了类似链接的作用。

4. 删除和清理镜像

4.1 删除镜像

使用 docker rmi 或 docker image rm 命令可以删除镜像。

 docker rmi IMAGE [IMAGE ... ]          # 其中 IMAGE 可以为标签或 ID 。
 docker image rm  IMAGE [IMAGE ... ]

       -f, -force     # 强制删除镜像, 即使有容器依赖它;
           -no-prune  # 不要清理未带标签的父镜像。

例如;我们删除刚刚新建的myubuntu:zabbx 镜像

image.png

图中可以看到myubuntu:zabbx 已经删除!
我们可能会想到,本地的ubuntu:18.04镜像是否会受到此命令的影响。无须担心,当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。因此上述操作相当于只是删除了镜像ccc6e87d482b的一个标签副本而已。

但当镜像只剩下一个标签的时候就要小心了,此时再使用 docker rmi 命令会彻底删除镜像。

还有就是如果有镜像已经在容器里运行的话,删除就会提示无法删除,如果要强制删除,就需要带上“-f”参数。

然后还可以通过ID 删除镜像:

docker rmi ccc6e87d482b

如果镜像的ID 拥有多个标签,也是只能强制删除了!

image.png

4.2 清理镜像

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

docker image prune

       -a, -all            # 删除所有无用镜像, 不光是临时镜像;
           -filter filter  # 只清理符合给定过滤器的镜像;
       -f, -force          # 强制删除镜像, 而不进行提示确认。