【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?

  • 作者: 凯哥Java(公众号:凯哥Java)
  • Docker
  • 时间:2022-12-01 11:27
  • 4756人已阅读
简介 通过前面学习,我们已经在centos系统中安装了docker,也成功的拉取了docker的hello-word镜像及运行成功了。那么有没有思考过如下问题:思考问题1:dockerrun到底干了些什么?当我们执行dockerrun镜像名称之后,docker会执行以下流程:1:docker会先从本机中寻找该镜像,查看本机是否存在。如果当前镜像,就直接以该镜像为模板生成容器实例来运行;如果本机不存在,就

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

通过前面学习,我们已经在centos系统中安装了docker,也成功的拉取了docker的hello-word镜像及运行成功了。那么有没有思考过如下问题:

思考问题1:

docker run 到底干了些什么?

当我们执行docker run 镜像名称之后,docker会执行以下流程:

1:docker会先从本机中寻找该镜像,查看本机是否存在。如果当前镜像,就直接以该镜像为模板生成容器实例来运行;如果本机不存在,就执行2;

2:去docker hub上查询该镜像(因为在上一篇中,大家跟着凯哥,已经将拉取镜像地址修改成阿里云的了,所以这里会从阿里云拉取镜像),远程镜像仓库是否能找到,如果找到,下载该镜像到本地,然后以该镜像为模板生成容器实例来运行;如果远程仓库不存在当前镜像,执行3;

3:如果在远程仓库中,也为找到该镜像,则提示原型失败,查不到该镜像。

整个流程如下图:0be0d237d798bd2ff0cfac7cccf21e46.png

思考2:docker为什么会比VM虚拟机快呢?

我们来看看一个形象的docker和VM虚拟机的对比图。如下图:

afd2b41e8f98f242fb5973fdd9d4013f.png

那么docker为什么会比VM虚拟机快呢?主要有以下两点:

1:docker有着比虚拟机更少的抽象层

由于Docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源;

我们知道虚拟机是需要虚拟出CPU及设置内存大小的。实际上就是,虚拟机虚拟出了CPU、内存等硬件资源。这比docker来说,多了很多抽象层的。如下图:

77d98a10e8ce737727b3ac5f9983574d.png

因此在CPU、内存利用率上docker将会在效率上有明显的。

2:docker利用的是宿主机的内核,而不需要加载操作系统的OS内核

当新建一个容器时候,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免了引寻、加载等操作内核返回等比较费时费资源的过程。

当新建一个虚拟机的时候,虚拟机软件需要加载OS,返回新建过程是分钟级别的,我们知道,创建虚拟机、安装操作系统,这个操作一系列下来,花费的时间不是几分钟而已,可能是好几十分钟。如下图:

a26cf92e14e90ab215e6a70355f0ac24.png

而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟时间。docker架构图如下:

2902c1fe5255acf4025a4fe6e3ce1834.png

如果重启了宿主机。使用下面命令启动docker

systemctl daemon-reload

systemctl restart docker.service






TopTop