一个“容器”,实际上是一个由 Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建出来的进程的隔离环境。
Docker通过 Namespace 实现进程隔离,那什么是Namespace呢?
命名空间是Linux内核的主要特征之一--它们进行了内核资源的区分。它确保一个进程只能看到指定的资源集。资源的例子是进程ID、主机名、文件、用户名、网络访问名和进程间通信。命名空间指的是命名空间的类型,也指指定的名称空间。
内核5.6版本有八种不同的命名空间。任何单独的进程只能查看或使用与该特定进程相关的命名空间。贯穿整个八个命名空间都能看到进程和命名空间之间的这种功能,与该进程相关的资源类型取决于为其提供的命名空间的种类。
让我们来看看其中几个的特点:
-Network (NET):虚拟化网络堆栈。 -UNIX Time Sharing (UTS):这允许系统为不同的进程使用不同的主机名和域名。
说回Docker,那么它具体是通过怎么样的方式实现隔离的呢?答案是通过clone()在创建新进程的同时创建namespace。
int clone(int (*child_func)(void *), void *child_stack, int flags, void *arg); | 留言与评论(共有 0 条评论) “” |