玩转Docker镜像(一)基础操作

🔗 上一篇文章 我们提到:Docker 镜像是 Docker 的核心、精髓,任何人都可以制作并分享自己制作的镜像。
咦?这个特性好像跟 GitHub 很类似?是的没错,Docker 也有一个类似 GitHub 的平台 DockerHub,其存储着官方/个人上传的镜像。在 Docker Hub 上有非常多高质量的官方镜像,有可以直接拿来做应用程序的镜像,如 nginx redis mongo mysql tomcat ;也有一些方便运行各种编程语言的镜像,比如 golang ;还有 Ubuntu 这种基础 Linux 系统镜像。
作为本系列教程基础篇的第一篇文章,我们将尝试从 DockerHub 上拉取公共镜像本地服务器,并尝试管理本地镜像。

拉取镜像

docker pull命令帮助我们从 DockerHub 拉取镜像,其命令格式为:
$ docker pull [选项] [镜像仓库地址]/[仓库名:标签]

  • 镜像仓库地址的格式:<域名/IP>:端口号,默认地址是 docker.io(也就是 DockerHub)。
  • 仓库名:两段式名称,即 用户名/软件名。对于 Docker Hub,则默认为 library(官方镜像)。

比如:

$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
92dc2a97ff99: Pull complete
be13a9d27eb8: Pull complete
c8299583700a: Pull complete
Digest: sha256:4bc3ae6596938cb0d9e5ac51a1152ec9dcac2a1c50829c74abd9c4361e321b26
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub(docker.io)获取镜像。该命令将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像。docker pull 命令的输出结果最后一行给出了镜像的完整名称,即: docker.io/library/ubuntu:18.04。
如果我们想拉取私有镜像呢,以 Ucloud 为例,拉取 Ucloud 镜像仓库的镜像需要这样的命令:

docker pull uhub.service.ucloud.cn/{已创建镜像仓库}/{镜像}:tag

拉取了镜像后,我们想查看一下镜像该怎么办呢?

展示镜像列表

docker images命令用来列出已经下载下来的镜像:

$ docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
redis                latest              5f515359c7f8        5 days ago          183 MB
nginx                latest              05a60462f8ba        5 days ago          181 MB
mongo                3.2                 fe9198c04d62        5 days ago          342 MB
<none>               <none>              00285df0df87        5 days ago          342 MB
ubuntu               18.04               329ed837d508        3 days ago          63.3MB
ubuntu               bionic              329ed837d508        3 days ago          63.3MB

如果想看特定仓库镜像可以这样:

$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               329ed837d508        3 days ago          63.3MB
ubuntu              bionic              329ed837d508        3 days ago          63.3MB

除此以外,docker images还支持强大的过滤器参数--filter,或者简写-f。之前我们已经看到了使用过滤器来列出虚悬镜像的用法,它还有更多的用法。比如,我们希望看到在 mongo:3.2 之后建立的镜像,可以用下面的命令:

$ docker image ls -f since=mongo:3.2
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              5f515359c7f8        5 days ago          183 MB
nginx               latest              05a60462f8ba        5 days ago          181 MB

想查看某个位置之前的镜像也可以,只需要把 since 换成 before 即可。
此外,如果镜像构建时,定义了 LABEL,还可以通过 LABEL 来过滤。

$ docker image ls -f label=com.example.version=0.1

过滤器参数和 Label 不是本文的主题,以后再详细阐述这两块内容。

删除镜像

如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:

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

如果镜像太多了,我们本地一个一个删很麻烦,其实可以这样:

$ docker image rm $(docker image ls -q redis)

删除所有仓库名为 redis 的镜像。

总结

学会以上三个操作,即学会了:

  1. 拉取镜像到本地服务器。
  2. 查看本地服务器的镜像。
  3. 删除本地服务器的镜像。

这是关于 Docker 镜像最基础的三个命令,后面我们将进一步学习 Docker 镜像,比如制作一个自己的 Docker 镜像,以及镜像的分层概念等等。