镜像的基本使用


获取镜像

获取镜像的命令格式如下:

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

参数说明如下:

  • Docker Registry 地址:格式一般是 <域名/IP>[:端口号],默认地址是 DockerHub,一般省略;
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <厂商名>/<软件名>,如果不给出厂商名,则默认为 library ,也就是官方镜像。

比如我们拉取一个 Ubuntu 的镜像:

拉取镜像

其中,ubuntu 是仓库名(library 省略了),16.04 是版本号

再比如 Laradock 中,php-fpmDockerfile 里面拉取镜像的命令是:

docker pull laradock/php-fpm:2.5-7.3

其中 laradock/php-fpm 就是仓库名(laradock 是厂商名),2.5-7.3 是标签。

从下载过程中还可以看出我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。并且下载结束后,给出该镜像完整的 sha256 的摘要,以确保下载一致性。

运行镜像

镜像下载完成后就可以通过 docker run 命令来启动它,比如下面这段命令表示以交互方式进入 ubuntu:16.04 的 Bash 环境(--rm 的含义是容器退出后将其删除):

运行镜像

进入 Bash 环境后就行执行 Ubuntu 命令与系统进行交互。

列出镜像

我们可以通过 docker image ls 命令列出系统所有的 Docker 镜像:

列举镜像

注:这里显示的镜像体积可能和 DockerHub 官方显示的值有出入,这是因为 DockerHub 显示的是压缩后的体积。

虚悬镜像

由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none> 的镜像。这类无标签镜像也被称为虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:

docker image ls -f dangling=true

一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面这个命令一次性删除它们:

docker image prune

中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 docker image ls 列表中只会显示顶层镜像,如果 希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数:

docker image ls -a

列出部分镜像

此外,我们还可以通过以下命令过滤出部分镜像:

docker image ls ubuntu  // 根据仓库名筛选
docker image ls ubuntu:16.04  // 指定仓库名和标签
docker image ls -f since=ubuntu:16.04  // -f 表示过滤器,全写是 --filter,这里筛选的是 ubuntu:16.04 之后构建的镜像
docker image ls -f before=ubuntu:16.04  // 与 since 相对,这里筛选的是 ubuntu:16.04 之前构建的镜像
docker image ls -q  // -q 表示只显示镜像 ID
docker image ls --format "{{.ID}}: {{.Repository}}"  // 还支持通过 Go 的模板语法显示特定列

删除本地镜像

删除镜像的命令格式如下所示:

docker image rm [选项] <镜像1> [<镜像2> ...]

其中,<镜像> 可以是镜像短 ID、镜像长 ID、镜像名(仓库名:标签)或者镜像摘要。通常,我们通过镜像短 ID 来删除即可(IMAGE ID 对应字段)。

还可以通过 docker image ls 命令来配合完成批量删除:

docker image rm $(docker image ls -q redis)
docker image rm $(docker image ls -q -f before=mongo:3.2)

Vote Vote Cancel Collect Collect Cancel

<< 上一篇: 本地安装 Docker 应用

>> 下一篇: 利用 docker commit 理解镜像分层构建