Docker | Linux namespace隔离

本文深入探讨了Docker如何利用Linux Namespace实现进程隔离,详细介绍了Namespace的种类,如MNT、PID、IPC、NET和UTS,阐述了它们在隔离环境中的作用。Docker通过clone()系统调用创建新进程和namespace,构建出安全的容器环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


theme: orange

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

🤞 个人主页:@青Cheng序员石头

一个“容器”,实际上是一个由 Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建出来的进程的隔离环境。

Linux namespace隔离

Docker通过 Namespace 实现进程隔离,那什么是Namespace呢?

image.png

命名空间是Linux内核的主要特征之一--它们进行了内核资源的区分。它确保一个进程只能看到指定的资源集。资源的例子是进程ID、主机名、文件、用户名、网络访问名和进程间通信。命名空间指的是命名空间的类型,也指指定的名称空间。

内核5.6版本有八种不同的命名空间。任何单独的进程只能查看或使用与该特定进程相关的命名空间。贯穿整个八个命名空间都能看到进程和命名空间之间的这种功能,与该进程相关的资源类型取决于为其提供的命名空间的种类。

让我们来看看其中几个的特点:

  • Mount (MNT):控制挂载点,当创建新的名称空间时,当前挂载被复制到新的名称空间。
  • Process ID (PID):为进程提供来自其他命名空间的进程 ID。
  • Interprocess Communication (IPC):防止不同 IPC 命名空间中的进程形成 SHM 函数。
    -Network (NET):虚拟化网络堆栈。 -UNIX Time Sharing (UTS):这允许系统为不同的进程使用不同的主机名和域名。

说回Docker,那么它具体是通过怎么样的方式实现隔离的呢?答案是通过clone()在创建新进程的同时创建namespace。 C int clone(int (*child_func)(void *), void *child_stack, int flags, void *arg);


少年,没看够?点击石头的详情介绍,随便点点看看,说不定有惊喜呢?欢迎支持点赞/关注/评论,有你们的支持是我更文最大的动力,多谢啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值