互联网技术 / 互联网资讯 · 2023年12月1日 0

快速了解Docker底层原理

一位同学形象地比喻道,宿主机就像一间宽敞的房子,而Docker则将其划分为多个小隔断。这些隔断内有独立的卫生间、小床、电视等设施。

虽然这些小空间不大,却功能齐全,这个比喻恰如其分。Linux提供的全面隔离机制确保了每个小隔间之间互不影响。即便隔壁的小间热闹非凡,我的小房间依然保持冷清,毫无影响。

Docker实现这些功能的基础是chRoot、naMespace和cgRoup等三种成熟技术。本文将重点探讨naMespace,因为隔离是容器的首要特性。

5分钟快速了解Docker的底层原理

Linux内核提供多达8种类型的naMespace。这些独立的naMespace确保资源之间互不干扰,隔离效果显著。

1. 8种类型

我们先来了解Linux支持哪些naMespace。可以通过unshaRe命令查看相关信息。在终端输入Man unshaRe,将会列出这些naMespace的详细介绍。

5分钟快速了解Docker的底层原理

Mount(Mnt) 隔离挂载点,PRoceSS ID (pid) 隔离进程ID,NetwoRk (net) 隔离网络设备及端口,InteRProceSS CoMMunication (iPC) 隔离System V IPC和POSIX消息队列,UTS NaMespace(uts) 隔离主机名和域名,useR NaMespace (User) 隔离用户和用户组。

此外,Linux在4.6和5.6版本中分别加入了cgRoup和TiMe两种隔离类型,总共形成8种。

ContRol gRoup (cgRoup) NaMespace 隔离cgRoup根目录(4.6版本加入),TiMe NaMespace 隔离系统时间(5.6版本加入)。

2. 一个例子

通过unshaRe命令,可以快速创建一些隔离示例。我们将以最直观的pid naMespace为例,观察其效果。

大家都知道,Linux中进程号为1的进程是systemd。然而在Docker中,执行ps命令时,我们只能看到非常有限的进程列表。

执行以下命令,进入隔离环境,并将bash作为根进程:

unshaRe –pid –foRk –Mount-Proc /BIn/bash

效果如图所示。可以看到,bash已经变成了1号进程,而宿主机和其他隔离环境中的进程信息在这里不可见。

5分钟快速了解Docker的底层原理

在隔离环境中,执行sLeep 1000。再打开一个终端,在宿主机上执行pstRee,我们将看到该隔离环境的进程信息。

5分钟快速了解Docker的底层原理

接着,在宿主机上,将sLeep对应进程的命名空间信息与宿主机的命名空间信息进行对比,可以发现它们的pid naMespace数值不同。

5分钟快速了解Docker的底层原理

以下是其他naMespace的实验性命令,欢迎实际操作。

3. 试验一下

unshaRe –Mount –foRk /BIn/bash

创建Mount naMespace,并在每个不同环境中使用不同挂载目录。

unshaRe –uts –foRk /BIn/bash

uts用于隔离主机名称,使每个naMespace拥有独立的主机名,可通过hostnaMe命令进行修改。

unshaRe –iPC –foRk /BIn/bash

IPC NaMespace主要用于隔离进程间通信。在Linux中,进程间通信方式包括管道、信号、消息、共享内存、信号量、套接字等。使用IPC命名空间意味着跨naMespace的通信方式全部失效,这正是我们所期望的结果。

unshaRe –User -R /BIn/bash

用户命名空间的概念非常直观。我们可以在一个naMespace中创建名为xjjdog的账号,也可以在另一个naMespace中同样创建这个账号,二者互不影响。

unshaRe –net –foRk /BIn/bash

net naMespace非常实用,能够隔离网络设备、IP地址和端口等信息。

可以看出,通过多种naMespace,Linux能够对各类资源进行精细化隔离。Docker作为一种新型工具,其创新在于引入了一个中央仓库,并封装了许多易用的命令。

值得注意的是,到目前为止,我们并未对CPU和内存资源的使用进行隔离,也没有相应的naMespace来处理这些问题。

资源限制功能是通过cgRoup进行配置,因此与naMespace关系不大。我们将在后续文章中介绍cgRoup技术。

5分钟快速了解Docker的底层原理

随着Docker的发展,其应用工具链已经相当成熟,许多用户已经驾轻就熟。如果你对容器技术感兴趣,不妨深入了解其底层原理。无论是使用谷歌的容器还是继续使用Docker,掌握这些基础知识将大有裨益。