开发者学堂课程【Docker 快速入门:Docker 运行底层原理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/616/detail/9394
Docker 运行底层原理
内容介绍:
一、课前讲解
二、Docker 的底层原理
一、课前讲解
通过前面的学习,可以说已经掌握 Docker helloworld 的基本运行,本期环境也都配置成功
前面的学习留下了一个伏笔,注意看,这段代码里有一个冒号和 latest,这才是一个完整的镜像名字,但是要注意的是,这里是不写的,默认是 latest 也就是最新版本,如果需要的不是最新版本,就要在冒号后面写上需要的版本号。
接下来学习 Docker 运行的机制和原理。
回顾之前学习的知识点,一个安装,一个运行 helloworld。学习的第一个命令是 docker run,这个 Docker 是 service docker restart 的一项,它非常快,比虚拟机还快。
二、Docker 的底层原理
1.Docker 是怎么工作的?
如图:
Docker 是一个 Client-Service(服务器端和客服端)结构的系统,Docker 守护进程运行在主机上,然后通过 Socket 连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。其中Docker 守护进程,是客户端和 docker 进行沟通,实质是 docker daemon 作为接口进行 docker 的处理。
容器,是一个运行时环境,就是前面说到的集装箱。
如图:
这里打了一个 docker run helloworld ,主机上的 daemon 内部的接口就是守护进程,Docker 容器就是一个集装箱,可以运行 helloworld 然后如法炮制。后续运行 Spark、MySQL、hadoop 时也可以把它们放在一个个的集装箱里,通过客服端来操作执行。
2.为什么 Docker 比 VM 快?
之前说过,虚拟机是分钟级的,Docker 是秒级的,它比虚拟技术更好,也比虚拟机更快,因此它也更加火爆。
(1)为什么 Docker 比虚拟机更快?
如图:
对比传统的虚拟机和 docker。
①docker 有着比虚拟机更少的抽象层。一个虚拟机是软件加硬件,是一个完整的操作系统,它有硬件的负担。由于 docker 不需要 Hypervisors 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的都是实际物理机的硬件资源。因此在 CPU 、内存利用率上 docker 将会在效率上有明显优势。
解析:docker 有着比虚拟机更少的抽象层。一个虚拟机是软件加硬件,是一个完整的操作系统,它有硬件的负担。而 docker 不需要 Hypervisors 实现硬件虚拟化资源。
如图:
左图是传统的虚拟机模型,假设 Host Opening System 是 window10 ,上面安装了虚拟机 VM 和 CentOS ,这两个实际上和主机有一个 Hypervisors 接口。
而 docke 是不需要 Hypervisors 实现硬件资源虚拟化的,docker 依旧有操作系统,但是减少了硬件资源虚拟化,换成了 docker 引擎,这样 docker 是没有硬件负担的,所以 docker 在利用效率上更高,在瘦身效果方面比虚拟机瘦。
②docker 利用的是宿主机的内核,而不需要 Guest OS 。因此,当新建一个容器时,docker 不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 Guest OS ,返个新建过程是分钟级别的。而 docker 由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个 docker 容器只需要几秒钟。
解析:在虚拟机上面可以安装 CentOs 。
如图:
可以创建一个新的虚拟机,这里可以使用多个操作系统。也可以在同一个虚拟机,每一个系统有一套库,还有各种应用。Docker 把这三个 Guest Os 去掉,那些硬件资源、宿主机的资源统一在 docker 中进行,不需要客服端的操作系统 Guest Os ,也因此,当新建一个容器时,docker 不需要和虚拟机一样重新加载一个操作系统内核。
如图:
这里重新创建一个虚拟机。由于虚拟机有操作系统,加载的就会很慢,而 docker 只有系统上的 docker 引擎,避免了耗时和资源浪费,而且虚拟机软件还需要加载 Guest Os ,新建操作系统的过程是分钟级别的,docker 没有这些累赘和拖累,它只需要宿主机共用的这些东西加载一个个集装箱,每一个集装箱上面就是应用,不需要每一套库去加载,只需要带一个 docker 即可。
重点如表格:
|
Docker 容器 |
虚拟机(VM) |
操作系统 |
与宿主机共享 OS |
宿主机 OS 上运行虚拟机 OS |
存储大小 |
镜像小,便于存储与运输 |
镜像庞大(vmdk、vdi 等) |
运行性能 |
几乎无额外性能损失 |
操作系统额外的 CPU、内存消耗 |
移植性 |
轻便、灵活、适应于 Linux |
笨重,与虚拟化技术耦合度高 |
硬件亲和性 |
面向软件开发者 |
面向硬件运维者 |
部署速度 |
快速、秒级 |
较慢,10s以上 |
Docker 容器和虚拟机的区别与特点就在此图。最重要的是,docker 没有操作系统和 Hypervisors ,不需要实现硬件资源虚拟化,这就是 docker 的亮点。
后续将进行在 docker 下面,容器以及一个个运行的容器实例如何与软件开发互相配合的讲解。(通过交给运维一个镜像,通过这个镜像模拟一个一模一样的运行环境在本地盘,这样部署是非常方便的。在机器开发上是可以的,但是在其他环境就无法进行)
以上就是 Docker 运行的底层原理。