通过前面学习,我们已经在centos系统中安装了docker,也成功的拉取了docker的hello-word镜像及运行成功了。那么有没有思考过如下问题:
思考问题1:
docker run 到底干了些什么?
当我们执行docker run 镜像名称之后,docker会执行以下流程:
1:docker会先从本机中寻找该镜像,查看本机是否存在。如果当前镜像,就直接以该镜像为模板生成容器实例来运行;如果本机不存在,就执行2;
2:去docker hub上查询该镜像(因为在上一篇中,大家跟着凯哥,已经将拉取镜像地址修改成阿里云的了,所以这里会从阿里云拉取镜像),远程镜像仓库是否能找到,如果找到,下载该镜像到本地,然后以该镜像为模板生成容器实例来运行;如果远程仓库不存在当前镜像,执行3;
3:如果在远程仓库中,也为找到该镜像,则提示原型失败,查不到该镜像。
整个流程如下图:
思考2:docker为什么会比VM虚拟机快呢?
我们来看看一个形象的docker和VM虚拟机的对比图。如下图:
那么docker为什么会比VM虚拟机快呢?主要有以下两点:
1:docker有着比虚拟机更少的抽象层
由于Docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源;
我们知道虚拟机是需要虚拟出CPU及设置内存大小的。实际上就是,虚拟机虚拟出了CPU、内存等硬件资源。这比docker来说,多了很多抽象层的。如下图:
因此在CPU、内存利用率上docker将会在效率上有明显的。
2:docker利用的是宿主机的内核,而不需要加载操作系统的OS内核
当新建一个容器时候,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免了引寻、加载等操作内核返回等比较费时费资源的过程。
当新建一个虚拟机的时候,虚拟机软件需要加载OS,返回新建过程是分钟级别的,我们知道,创建虚拟机、安装操作系统,这个操作一系列下来,花费的时间不是几分钟而已,可能是好几十分钟。如下图:
而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟时间。docker架构图如下:
如果重启了宿主机。使用下面命令启动docker
systemctl daemon-reload
systemctl restart docker.service