学习准备一个容器的运行环境,更准确的说,应该是拉取一个具备某个运行环境的镜像,要求学习者参照示例完成“从Docker Hub
中拉取一个busybox:1.27
镜像”的功能。
相关知识
在Docker
的官方镜像仓库Docker Hub
中保存了各种各样的镜像,这些镜像中保存了各种各样的运行环境。例如包含Linux
运行环境的“ubuntu
”镜像、“centos
”镜像、“busybox
”镜像等,提供数据库服务的“mysql
”镜像、“o\fracle
”镜像、“redis
”镜像等。提供程序运行环境的“java
”镜像、“python
”镜像、“c++
”镜像等等。基本上我们日常工作所需要的运行环境在Docker Hub
中都会有对应的镜像(Docker Hub
官网:https://hub.docker.com/ )(这些镜像不是凭空出现的,这是镜像构建者们辛勤的劳动成果。每一个Docker
的使用者都应该感谢这些镜像构建者们!!)
但是在安装完Docker
之后,本地是没有任何镜像的。下面介绍如何从Docker Hub
中拉取镜像(或者说下载镜像)。
获取镜像
默认情况下,使用docker pull
命令,会从官方的Docker Hub
库中将镜像拉取到本地。
首先介绍这条命令的格式:
docker pull [OPTIONS] <仓库名>:<标签>
其中,
docker pull
:Docker
拉取镜像的命令关键词;[OPTIONS]
:命令选项;仓库名
:仓库名的格式一般为<用户名>/<软件名>
。对于Docker Hub
,如果不指定用户名,则默认为library
,即官方镜像;标签
:标签是区分镜像不同版本的一个重要参数,<仓库名>:<标签>
会唯一确定一个镜像。默认为latest
。
例如,我们要从Docker Hub
官方仓库拉取一个Ubuntu 14.04
的官方镜像,其语句如下:
docker pull ubuntu:14.04
docker pull命令背后的工作
首先,如果tag
值为空,即没有指定标签,就会使用默认tag
,也就是latest
,如果tag
值不为空,就使用指定的tag
。
然后,默认情况下,会在Docker Hub
中寻找名为“repoName
”的仓库,如果仓库不存在,返回错误信息。如果仓库存在,就从仓库中拉取对应tag
的镜像。例如:如果执行docker pull ubuntu:14.04
,那么将从“ubuntu
”仓库中拉取tag
为14.04
的镜像,而如果执行docker pull ubuntu
,会从“ubuntu
”仓库中拉取tag
为latest
的镜像。 (在Docker Hub
中有很多个镜像仓库,一般情况下会将同一类型的镜像放在同一个仓库中,例如在一个ubuntu
仓库中由很多个ubuntu
镜像组成,包括ubuntu:14.04
、ubuntu:16.04
、ubuntu:latest
等等镜像)。
最后,将拉取的镜像存储到本地的指定位置。
docker pull的两个基本实例
执行docker pull ubuntu
之后,会有下面的执行结果。(执行命令之前,本地并不存在ubuntu:latest
镜像)。
如下图所示,因为没有显示地指定tag
,所以就使用默认tag
,也就是latest
。于是会在Docker Hub
中从ubuntu
仓库中拉取ubuntu:latest
镜像,当将镜像一层层下载完成后,存储到本地。
[root@localhost Desktop]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
e0a742c2abfd: Pull complete
486cb8339a27: Pull complete
dc6f0d824617: Pull complete
4f7a5649a30e: Pull complete
672363445ad2: Pull complete
Digest: sha256:84c334414e2bfdcae99509a6add166bbb4fa4041dc3fa6af08046a66fed3005f
Status: Downloaded newer image for ubuntu:latest
[root@localhost Desktop]#
那从Docker Hub
中拉取一个不存在的镜像会怎么样呢?如下所示,执行docker pull aaa
后,会在Docker Hub
中查找aaa
仓库,由于不存在aaa
仓库,所以没有找到,返回了错误信息。
[root@localhost Desktop]# docker pull aaa
Using default tag: latest
Error response from daemon: repository aaa not found: does not exist or no pull access
设置镜像加速器
由于“伟大的墙”的原因,在国内从Docker Hub
中拉取镜像的速度可能会比较慢,国内很多云服务商都提供了镜像加速器服务,例如阿里、网易等等。
以Linux
系统配置阿里云加速器为例,只需要将下面的命令复制到Linux
的终端,以root
用户的身份执行之后,就成功的配置了阿里云加速器了!
#以root用户执行以下操作
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{#下面的URL可以替换为你自己的阿里云加速地址
"registry-mirrors": ["https://jxus37ad.mirror.aliyuncs.com "]
}
EOF
systemctl daemon-reload
systemctl restart docker
任务要求
本关的编程任务是补全step2/pullimage.sh
文件中的内容,要求拉取一个名为busybox:latest
的镜像。具体要求如下:
- 从
Docker Hub
官方镜像仓库拉取busybox:1.27
镜像。
本关涉及的代码文件step2/pullimage.sh
的代码框架如下:
#注意如果想在右侧使用命令行模拟操作,请先输入
#service docker start
#否则将不能执行docker命令
#拉取busybox:1.27镜像
#********** Begin *********#
docker pull busybox:1.27
#********** End **********#