Docker 获取镜像与列出镜像

Docker笔记

#Docker#

获取镜像

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
  • 仓库名:这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

docker pull ubuntu:18.04
获取官方镜像library/ubuntu仓库中的18.04的镜像

  • 镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。

运行ubuntu bash

docker run -it —rm \
ubuntu:18.04 \
bash

  • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
  • –rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
  • ubuntu:18.04:这是指用 ubuntu:18.04 镜像为基础来启动容器。
    bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

随便一个操作,查看当前ubuntu版本:
cat /etc/os-release
退出
exit


列出镜像

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              62f816a209e6        5 weeks ago         109MB
ubuntu              18.04               ea4c82dcd15a        7 weeks ago         85.8MB
  • 镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签。
  • 需要注意,docker image ls 列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker 使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。
  • 中间层镜像是隐藏的,需要使用docker image ls -a

查看镜像、容器、数据卷所占用的空间

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              2                   0                   195MB               195MB (100%)
Containers          0                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

镜像列表中,可能会看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为 。:

                             00285df0df87        5 days ago          342 MB

这个镜像原本是有镜像名和标签的,随着官方镜像维护,发布了新版本后,旧的镜像上的这个名称则被取消,从而成为了 。这类无标签镜像也被称为虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:

$ docker image ls -f dangling=true

一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的

$ docker image prune

列出部分镜像

根据仓库名列出镜像

$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               ea4c82dcd15a        7 weeks ago         85.8MB

除此以外,docker image ls 还支持强大的过滤器参数 --filter,或者简写 -f。我们希望看到在 mongo:3.2 之后建立的镜像,可以用下面的命令:

$ docker image ls -f since=ubuntu:18.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              62f816a209e6        5 weeks ago         109MB

想查看某个位置之前的镜像也可以,只需要把 since 换成 before 即可。

此外,如果镜像构建时,定义了 LABEL,还可以通过 LABEL 来过滤。

以特定格式显示

默认情况下,docker image ls 会输出一个完整的表格,但是我们并非所有时候都会需要这些内容。比如,刚才删除虚悬镜像的时候,我们需要利用 docker image ls 把所有的虚悬镜像的 ID 列出来,然后才可以交给 docker image rm 命令作为参数来删除指定的这些镜像,这个时候就用到了 -q 参数。

$ docker image ls -q
62f816a209e6
ea4c82dcd15a

–filter 配合 -q 产生出指定范围的 ID 列表,然后送给另一个 docker 命令作为参数,从而针对这组实体成批的进行某种操作的做法在 Docker 命令行使用过程中非常常见,不仅仅是镜像,将来我们会在各个命令中看到这类搭配以完成很强大的功能。因此每次在文档看到过滤器后,可以多注意一下它们的用法。

另外一些时候,我们可能只是对表格的结构不满意,希望自己组织列;或者不希望有标题,这样方便其它程序解析结果等,这就用到了 Go 的模板语法。比如,下面的命令会直接列出镜像结果,并且只包含镜像ID和仓库名:

$ docker image ls --format "{{.ID}}: {{.Repository}}"

或者打算以表格等距显示,并且有标题行,和默认一样,不过自己定义列:

$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

你可能感兴趣的:(Docker)