您的位置:首页 > 文旅 > 旅游 > Docker容器技术原理

Docker容器技术原理

2024/12/23 10:21:16 来源:https://blog.csdn.net/livovil/article/details/139492467  浏览:    关键词:Docker容器技术原理

深入剖析Linux容器

Docker本质是宿主机上的进程,通过namespace实现资源隔离,通过cgroups实现资源限制
docker深度学习-github

Docker技术原理

Docker 是利用 Linux 的 Namespace 、Cgroups 和联合文件系统三大机制来保证实现的, 所以它的原理是使用 Namespace 做主机名、网络、PID 等资源的隔离,使用 Cgroups 对进程或者进程组做资源(例如:CPU、内存等)的限制,联合文件系统用于镜像构建和容器运行环境。
● namespace
○ 实现机器内核资源的隔离
○ 使得容器进程可以在单独的命名空间下运行,并且只可以访问当前容器命名空间的资源
● Cgroups:Linux Control Group
○ 限制和隔离进程资源使用情况(CPU,内存,磁盘I/O,网络)
○ 优先级控制
○ 审计-计费用
○ controle- 挂起和回复进程
○ 限制容器资源的使用
● UnionFS:联合文件系统
○ 分层、轻量级并且高性能的文件系统,
○ 它支持对文件系统的修改作为一次提交来一层层的叠加
○ 同时可以将不同目录挂载到同一个虚拟文件系统下
○ Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
在这里插入图片描述

○ 最上面的容器层是可写的,下面的镜像层都是只读;实现一个镜像被多个容器共享

Nasmespace资源隔离机制

namespace是Linux提供的资源隔离机制,只有同一个ns下的进程可以相互联系,但是无法感受到外部进程的存在
简单来说,Namespace 是 Linux 内核的一个特性,该特性可以实现在同一主机系统中,对进程 ID、主机名、用户 ID、文件名、网络和进程间通信等资源的隔离。Docker 利用 Linux 内核的 Namespace 特性,实现了每个容器的资源相互隔离,从而保证容器内部只能访问到自己 Namespace 的资源。
在这里插入图片描述

mount namespace

用来隔离不同进程或者进程组看到的挂载点,实现不同的进程看到不同的挂载目录;实现容器的文件系统隔离

PID namespace

再不用的PIDns中,进程可以拥有相同的PID,理由PID NS可以实现每个容器的主进程都是1号进程,二容器内的进程在主机上却拥有不同的PID;例如一个进程在主机上 PID 为 122,使用 PID Namespace 可以实现该进程在容器内看到的 PID 为 1

UTS namespace

隔离主机名,允许每个uts NS拥有一个独立的主机名

IPC namespace

隔离进程通信,PID NS和IPC NS一起使用可以实现,同一IPC NS下的进程可以彼此通信,不同IPC NS 下的进程却不能通讯;

User namespace

隔离用户和用户组
应用:在主机上以非root用户运行的进程可以在一个单独的User NS中映射成Root用户

Net namespace

隔离网络设备、IP地址和端口登信息
Net NS可以让每个进程拥有自己独立的IP地址,端口和网卡信息

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com