找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2634|回复: 12

详解docker底层实现:命名空间+控制组+union文件系统+容器格式

 火.. [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:27
  • 打卡月天数:6
  • 打卡总奖励:7736
  • 最近打卡:2025-12-20 00:35:11

3317

主题

285

回帖

2万

积分

管理员

积分
23881
发表于 2021-2-28 13:54:36 | 显示全部楼层 |阅读模式
概述
Docker 底层的核心技术包括 Linux 上的命名空间、控制组、Union 文件系统和容器格式。
下面对基本架构和这几个方面做个介绍。

docker容器虚拟化方式



基本架构
Docker 采用了 C/S 架构,包括客户端和服务端。Docker 守护进程作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)。
客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTfulAPI 来进行通信。

docker基本架构


命名空间
命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。
1、pid 命名空间
不同用户的进程就是通过 pid 命名空间隔离开的,且不同命名空间中可以有相同pid。所有的 LXC 进程在 Docker 中的父进程为Docker进程,每个 LXC 进程具有不同的命名空间。同时由于允许嵌套,因此可以很方便的实现嵌套的 Docker 容器。
2、net 命名空间
有了 pid 命名空间, 每个命名空间中的 pid 能够相互隔离,但是网络端口还是共享host 的端口。网络隔离是通过 net 命名空间实现的, 每个 net 命名空间有独立的网络设备, IP 地址, 路由表, /proc/net 目录。这样每个容器的网络就能隔离开来。
Docker 默认采用 veth 的方式,将容器中的虚拟网卡同 host 上的一 个Docker 网桥docker0 连接在一起。
3、ipc 命名空间
容器中进程交互还是采用了 Linux 常见的进程间交互方法, 包括信号量、消息队列和共享内存等。然而同 VM 不同的是,容器的进程间交互实际上还是 host 上具有相同 pid 命名空间中的进程间交互,因此需要在 IPC 资源申请时加入命名空间信息,每个 IPC 资源有一个唯一的 32 位id。
4、mnt 命名空间
类似 chroot,将一个进程放到一个特定的目录执行。mnt 命名空间允许不同命名空间的进程看到的文件结构不同,这样每个命名空间 中的进程所看到的文件目录就被隔离开了。
5、uts 命名空间
UTS("UNIX Time-sharing System") 命名空间允许每个容器拥有独立的 hostname和 domain name, 使其在网络上可以被视作一个独立的节点而非 主机上的一个进程。
6、user 命名空间
每个容器可以有不同的用户和组 id, 也就是说可以在容器内用容器内部的用户执行程序而非主机上的用户。

控制组
控制组(cgroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。 控制组可以提供对容器的内存、CPU、磁盘 IO 等资源的限制和审计管理。



联合文件系统
联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。
联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
另外,不同 Docker 容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。
Docker 目前支持的联合文件系统包括 OverlayFS , AUFS , Btrfs , VFS ,ZFS 和 Device Mapper 。

容器格式
最初,Docker 采用了 LXC 中的容器格式。从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。

来源:波波说运维(头条)
原链:https://www.toutiao.com/a6664528819610714631/
工控课堂 www.gkket.com

0

主题

145

回帖

233

积分

注册会员

积分
233
发表于 2021-2-28 13:54:38 | 显示全部楼层
感恩无私的分享与奉献
工控课堂 www.gkket.com

0

主题

193

回帖

679

积分

中级会员

积分
679
发表于 2021-2-28 15:09:22 | 显示全部楼层
真是被感动的痛哭流涕……
工控课堂 www.gkket.com

0

主题

101

回帖

155

积分

新手上路

积分
155
发表于 2025-11-18 05:50:03 | 显示全部楼层
这逻辑绝了,分析得太到位了吧
工控课堂 www.gkket.com

0

主题

91

回帖

127

积分

新手上路

积分
127
发表于 2025-11-18 06:13:04 | 显示全部楼层
同款经历!简直是世另我
工控课堂 www.gkket.com

0

主题

96

回帖

148

积分

新手上路

积分
148
发表于 2025-11-18 06:28:22 | 显示全部楼层
来凑个热闹,为楼主增加点人气!
工控课堂 www.gkket.com

0

主题

450

回帖

2328

积分

高级会员

积分
2328
发表于 2025-11-18 06:31:25 | 显示全部楼层
占个楼慢慢看,先马克一下
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com

0

主题

61

回帖

78

积分

新手上路

积分
78
发表于 2025-11-18 06:32:11 | 显示全部楼层
水个经验,楼主加油,支持你~
工控课堂 www.gkket.com

0

主题

90

回帖

155

积分

新手上路

积分
155
发表于 2025-11-18 06:34:18 | 显示全部楼层
谁懂啊!这内容我能循环看十遍
工控课堂 www.gkket.com

0

主题

90

回帖

126

积分

新手上路

积分
126
发表于 2025-11-18 06:37:12 | 显示全部楼层
这波反向操作,我属实没想到!
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 15:42 , Processed in 0.102740 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表