镜像的基本使用
获取镜像
获取镜像的命令格式如下:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
参数说明如下:
- Docker Registry 地址:格式一般是
<域名/IP>[:端口号]
,默认地址是 DockerHub,一般省略; - 仓库名:如之前所说,这里的仓库名是两段式名称,即
<厂商名>/<软件名>
,如果不给出厂商名,则默认为library
,也就是官方镜像。
比如我们拉取一个 Ubuntu 的镜像:
其中,ubuntu
是仓库名(library
省略了),16.04 是版本号
再比如 Laradock 中,php-fpm
的 Dockerfile
里面拉取镜像的命令是:
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)
No Comments