玩转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 的镜像。
总结
学会以上三个操作,即学会了:
- 拉取镜像到本地服务器。
- 查看本地服务器的镜像。
- 删除本地服务器的镜像。
这是关于 Docker 镜像最基础的三个命令,后面我们将进一步学习 Docker 镜像,比如制作一个自己的 Docker 镜像,以及镜像的分层概念等等。