3.1 获取镜像
镜像是运行容器的前提,官方的Docker Hub网站已经提供了数十万个镜像供大家开放下载。本节主要介绍Docker镜像的pull子命令。
可以使用docker [image] pull命令直接从Docker Hub镜像源来下载镜像。该命令的格式为docker [image] pull NAME[:TAG]。
其中,NAME是镜像仓库名称(用来区分镜像), TAG是镜像的标签(往往用来表示版本信息)。通常情况下,描述一个镜像需要包括“名称+标签”信息。
例如,获取一个Ubuntu 18.04系统的基础镜像可以使用如下的命令:
$ docker pull ubuntu:18.04 18.04: Pulling from library/ubuntu
... Digest: sha256:e27e9d7f7f28d67aa9e2d7540bdc2b33254b452ee8e60f388875e5b7d9b2b696 Status: Downloaded newer image for ubuntu:18.04
对于Docker镜像来说,如果不显式指定TAG,则默认会选择latest标签,这会下载仓库中最新版本的镜像。
下面的例子将从Docker Hub的Ubuntu仓库下载一个最新版本的Ubuntu操作系统的镜像:
$ docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu ... Digest: sha256:e27e9d7f7f28d67aa9e2d7540bdc2b33254b452ee8e60f388875e5b7d9b2b696 Status: Downloaded newer image for ubuntu:latest
该命令实际上下载的就是ubuntu:latest镜像。
注意
一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest标记的镜像。
下载过程中可以看出,镜像文件一般由若干层(layer)组成,6c953ac5d795这样的串是层的唯一id(实际上完整的id包括256比特,64个十六进制字符组成)。使用docker pull命令下载中会获取并输出镜像的各层信息。当不同的镜像包括相同的层时,本地仅存储了层的一份内容,减小了存储空间。
读者可能会想到,在不同的镜像仓库服务器的情况下,可能会出现镜像重名的情况。
严格地讲,镜像的仓库名称中还应该添加仓库地址(即registry,注册服务器)作为前缀,只是默认使用的是官方Docker Hub服务,该前缀可以忽略。
例如,docker pull ubuntu:18.04命令相当于docker pull registry.hub.docker.com/ubuntu:18.04命令,即从默认的注册服务器Docker Hub Registry中的ubuntu仓库来下载标记为18.04的镜像。
如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址。例如从网易蜂巢的镜像源来下载ubuntu:18.04镜像,可以使用如下命令,此时下载的镜像名称为hub.c.163.com/public/ubuntu:18.04:
$ docker pull hub.c.163.com/public/ubuntu:18.04
pull子命令支持的选项主要包括:
❑ -a, --all-tags=true|false:是否获取仓库中的所有镜像,默认为否;
❑ --disable-content-trust:取消镜像的内容校验,默认为真。
另外,有时需要使用镜像代理服务来加速Docker镜像获取过程,可以在Docker服务启动配置中增加--registry-mirror=proxy_URL来指定镜像代理服务地址(如https://registry.docker-cn.com)。
下载镜像到本地后,即可随时使用该镜像了,例如利用该镜像创建一个容器,在其中运行bash应用,执行打印“Hello World”命令:
$ docker run -it ubuntu:18.04 bash root@65663247040f:/# echo "Hello World" Hello World root@65663247040f:/# exit