Docker 运行底层原理 | 学习笔记

简介: 快速学习 Docker 运行底层原理

开发者学堂课程【Docker 快速入门:Docker 运行底层原理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/616/detail/9394


Docker 运行底层原理

内容介绍:

一、课前讲解

二、Docker 的底层原理

 

一、课前讲解

通过前面的学习,可以说已经掌握 Docker helloworld 的基本运行,本期环境也都配置成功

image.png

前面的学习留下了一个伏笔,注意看,这段代码里有一个冒号和 latest,这才是一个完整的镜像名字,但是要注意的是,这里是不写的,默认是 latest 也就是最新版本,如果需要的不是最新版本,就要在冒号后面写上需要的版本号。

接下来学习 Docker 运行的机制和原理。

回顾之前学习的知识点,一个安装,一个运行 helloworld。学习的第一个命令是 docker run,这个 Docker 是 service docker restart 的一项,它非常快,比虚拟机还快。

 

二、Docker 的底层原理

1.Docker 是怎么工作的?

如图:

Docker 是一个 Client-Service(服务器端和客服端)结构的系统,Docker 守护进程运行在主机上,然后通过 Socket 连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。其中Docker 守护进程,是客户端和 docker 进行沟通,实质是 docker daemon 作为接口进行 docker 的处理。

容器,是一个运行时环境,就是前面说到的集装箱。

如图:

image.png

这里打了一个 docker run helloworld ,主机上的 daemon 内部的接口就是守护进程,Docker 容器就是一个集装箱,可以运行 helloworld 然后如法炮制。后续运行 Spark、MySQL、hadoop 时也可以把它们放在一个个的集装箱里,通过客服端来操作执行。

2.为什么 Docker 比 VM 快?

之前说过,虚拟机是分钟级的,Docker 是秒级的,它比虚拟技术更好,也比虚拟机更快,因此它也更加火爆。

(1)为什么 Docker 比虚拟机更快?

如图:

image.png

对比传统的虚拟机和 docker。

①docker 有着比虚拟机更少的抽象层。一个虚拟机是软件加硬件,是一个完整的操作系统,它有硬件的负担。由于 docker 不需要 Hypervisors 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的都是实际物理机的硬件资源。因此在 CPU 、内存利用率上 docker 将会在效率上有明显优势。

解析:docker 有着比虚拟机更少的抽象层。一个虚拟机是软件加硬件,是一个完整的操作系统,它有硬件的负担。而 docker 不需要 Hypervisors 实现硬件虚拟化资源。

如图:

image.png

左图是传统的虚拟机模型,假设 Host Opening System 是 window10 ,上面安装了虚拟机 VM 和 CentOS ,这两个实际上和主机有一个 Hypervisors 接口。

而 docke 是不需要 Hypervisors 实现硬件资源虚拟化的,docker 依旧有操作系统,但是减少了硬件资源虚拟化,换成了 docker 引擎,这样 docker 是没有硬件负担的,所以 docker 在利用效率上更高,在瘦身效果方面比虚拟机瘦。

②docker 利用的是宿主机的内核,而不需要 Guest OS 。因此,当新建一个容器时,docker 不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 Guest OS ,返个新建过程是分钟级别的。而 docker 由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个 docker 容器只需要几秒钟。

解析:在虚拟机上面可以安装 CentOs 。

如图:

image.png

image.png

image.png

可以创建一个新的虚拟机,这里可以使用多个操作系统。也可以在同一个虚拟机,每一个系统有一套库,还有各种应用。Docker 把这三个 Guest Os 去掉,那些硬件资源、宿主机的资源统一在 docker 中进行,不需要客服端的操作系统 Guest Os ,也因此,当新建一个容器时,docker 不需要和虚拟机一样重新加载一个操作系统内核。

如图:

image.png

这里重新创建一个虚拟机。由于虚拟机有操作系统,加载的就会很慢,而 docker 只有系统上的 docker 引擎,避免了耗时和资源浪费,而且虚拟机软件还需要加载 Guest Os ,新建操作系统的过程是分钟级别的,docker 没有这些累赘和拖累,它只需要宿主机共用的这些东西加载一个个集装箱,每一个集装箱上面就是应用,不需要每一套库去加载,只需要带一个 docker 即可。

重点如表格:

 

Docker 容器

虚拟机(VM

操作系统

与宿主机共享 OS

宿主机 OS 上运行虚拟机 OS

存储大小

镜像小,便于存储与运输

镜像庞大(vmdk、vdi 等)

运行性能

几乎无额外性能损失

操作系统额外的 CPU、内存消耗

移植性

轻便、灵活、适应于 Linux

笨重,与虚拟化技术耦合度高

硬件亲和性

面向软件开发者

面向硬件运维者

部署速度

快速、秒级

较慢,10s以上

Docker 容器和虚拟机的区别与特点就在此图。最重要的是,docker 没有操作系统和 Hypervisors ,不需要实现硬件资源虚拟化,这就是 docker 的亮点。

后续将进行在 docker 下面,容器以及一个个运行的容器实例如何与软件开发互相配合的讲解。(通过交给运维一个镜像,通过这个镜像模拟一个一模一样的运行环境在本地盘,这样部署是非常方便的。在机器开发上是可以的,但是在其他环境就无法进行)

以上就是 Docker 运行的底层原理。

相关文章
|
18天前
|
安全 Docker 容器
|
12天前
|
安全 Linux Shell
docker运行centos提示Operation not permitted
通过上述步骤,可以有效排查和解决在Docker中运行CentOS容器时遇到的"Operation not permitted"错误。这些措施涵盖了从权限配置、安全策略到容器运行参数的各个方面,确保在不同环境和使用场景下都能顺利运行容器。如果你需要进一步优化和管理你的Docker环境
19 3
|
27天前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
189 3
|
27天前
|
安全 网络安全 开发者
Docker学习笔记(一):Docker命令总结
本文介绍了Docker的基本概念、优点以及常用命令。Docker是一个开源的应用容器引擎,它通过容器打包应用程序及其依赖项,实现快速部署和迁移。主要优点包括轻量级、可移植性、易于管理、安全性和开源性。文章还区分了镜像和容器的概念,并提供了构建镜像、查看容器、运行容器、停止和删除容器等常用Docker命令的示例。
124 0
|
1月前
|
安全 Docker 容器
Docker中运行容器时Operation not permitted报错问题解决
【10月更文挑战第2天】Docker中运行容器时Operation not permitted报错问题解决
250 3
|
1月前
|
前端开发 应用服务中间件 nginx
docker运行nginx镜像
这篇文章详细说明了如何在Docker中部署并运行Nginx服务,包括拉取镜像、配置文件的挂载以及容器的启动配置。
174 0
docker运行nginx镜像
|
1月前
|
缓存 NoSQL Redis
docker运行redis镜像
这篇文章介绍了如何使用Docker运行Redis镜像,并提供了启动和配置Redis容器的具体命令和步骤。
100 0
|
6月前
|
安全 Linux 数据安全/隐私保护
docker运行报错docker: Error response from daemon: AppArmor enabled on system but the docker-default prof
docker运行报错docker: Error response from daemon: AppArmor enabled on system but the docker-default prof
407 0
|
关系型数据库 MySQL Devops
docker容器刚启动就停止 — 运行mysql 报错 mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
docker容器刚启动就停止 — 运行mysql 报错 mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
905 0
|
关系型数据库 MySQL Docker
Docker - 运行 Mysql 容器后报错:[ERROR] --initialize specified but the data directory has files in it. Aborting.
Docker - 运行 Mysql 容器后报错:[ERROR] --initialize specified but the data directory has files in it. Aborting.
1513 0
Docker - 运行 Mysql 容器后报错:[ERROR] --initialize specified but the data directory has files in it. Aborting.
下一篇
无影云桌面