当前位置: 首页 > news >正文

【docker】namespace底层机制

Linux 的 Namespace 机制是实现容器化(如 Docker、LXC 等)的核心技术之一,它通过隔离系统资源(如进程、网络、文件系统等)为进程提供独立的运行环境。其底层机制涉及内核数据结构、系统调用和进程管理。以下是其核心实现原理的详细分析:


Namespace 的类型

Linux 支持多种类型的 Namespace,每种类型隔离不同的资源:

  • PID Namespace:隔离进程 ID。
  • Mount Namespace:隔离文件系统挂载点。
  • UTS Namespace:隔离主机名和域名。
  • IPC Namespace:隔离进程间通信(消息队列、共享内存等)。
  • Network Namespace:隔离网络设备、协议栈、端口等。
  • User Namespace:隔离用户和用户组 ID(支持权限隔离)。
  • Cgroup Namespace(Linux 4.6+):隔离 Cgroup 根目录视图。
  • Time Namespace(Linux 5.6+):隔离系统时间。

Namespace 生命周期

  • 引用计数:每个 Namespace 结构体通过引用计数(atomic_t count)管理生命周期。
    • 当最后一个引用该 Namespace 的进程退出时,Namespace 被销毁。
  • 持久化:通过挂载 /proc/<pid>/ns/ 下的符号链接,可以将 Namespace 文件描述符保持打开状态,防止其自动释放。

具体实现示例

(1) PID Namespace
  • 隔离机制:每个 PID Namespace 有独立的进程 ID 空间,进程在不同 Namespace 中可拥有不同的 PID。
  • 层级结构:PID Namespace 是层次化的,子 Namespace 可见父 Namespace 的进程,但父 Namespace 无法看到子 Namespace 的进程。
  • proc 文件系统:在 PID Namespace 中,/proc 仅显示当前 Namespace 可见的进程。
(2) Network Namespace
  • 隔离资源:网络设备、IP 地址、路由表、防火墙规则等。
  • 实现方式
    • 每个 Network Namespace 有自己的 struct net 结构体。
    • 通过 veth 虚拟设备连接不同 Namespace。
(3) User Namespace
  • 权限隔离:允许非特权用户在 User Namespace 内拥有完整权限(如 root),但在外部仍为非特权用户。
  • Capabilities:进程在 User Namespace 内可拥有特定的权能(Capabilities)。

与 VFS 和 Cgroups 的交互

  • Mount Namespace:通过 VFS(虚拟文件系统)的挂载点树实现隔离,每个 Namespace 维护独立的挂载视图。
  • Cgroup Namespace:隔离 Cgroup 文件系统的视图,使容器内的进程只能看到自身的 Cgroup 层级。

用户态工具

  • unshare 命令:直接调用 unshare() 系统调用创建新 Namespace。
  • nsenter 命令:进入指定进程的 Namespace。
  • ip netns:管理 Network Namespace。

性能与安全性

  • 低开销:Namespace 是轻量级的,主要依赖内核数据结构隔离。
  • 安全边界:User Namespace 是容器安全的关键,需结合 Capabilities 和 Seccomp 进一步限制权限。

总结

Linux Namespace 的底层机制通过内核数据结构的隔离、引用计数管理和系统调用协作,实现了资源的轻量级虚拟化。这种机制为容器化技术提供了基础,使多个进程能够在同一主机上运行且互不干扰。理解其实现细节有助于优化容器性能、排查隔离问题及设计更安全的运行时环境。


底层扩展

内核数据结构

(1) task_struct 结构体

每个进程(或线程)的内核描述符 task_struct 中有一个字段 nsproxy,指向一个 struct nsproxy 对象,该对象管理进程所属的所有 Namespace:

struct task_struct {// ...struct nsproxy *nsproxy;// ...
};struct nsproxy {atomic_t count;             // 引用计数struct uts_namespace *uts_ns;struct ipc_namespace *ipc_ns;struct mnt_namespace *mnt_ns;struct pid_namespace *pid_ns_for_children;struct net *net_ns;struct cgroup_namespace *cgroup_ns;struct time_namespace *time_ns;// ...
};
  • 每个类型的 Namespace 对应一个独立的内核结构体(如 uts_namespacepid_namespace)。
  • 进程通过 nsproxy 共享或隔离资源视图。
(2) Namespace 的创建与继承
  • 创建新 Namespace:通过 clone()unshare() 系统调用时指定 CLONE_NEW* 标志(如 CLONE_NEWPID),内核会复制或新建对应的 Namespace 结构体。
  • 继承机制:默认情况下,子进程继承父进程的 Namespace;通过 clone()flags 参数可控制是否共享或创建新 Namespace。

关键系统调用

(1) clone()

创建新进程时指定 Namespace:

int clone(int (*fn)(void *), void *stack, int flags, void *arg, ...);
  • flags 参数指定要创建的 Namespace 类型(如 CLONE_NEWPID 创建新 PID Namespace)。
  • 内核会为新进程分配新的 nsproxy 结构,并初始化对应的 Namespace。
(2) unshare()

将当前进程从某个共享的 Namespace 中分离,创建新的 Namespace:

int unshare(int flags);
  • 例如:unshare(CLONE_NEWNET) 会让当前进程进入一个新的 Network Namespace。
(3) setns()

将进程加入一个已存在的 Namespace:

int setns(int fd, int nstype);
  • fd 是目标 Namespace 的文件描述符(通常通过 /proc/<pid>/ns/ 目录获取)。

相关文章:

【docker】namespace底层机制

Linux 的 Namespace 机制是实现容器化&#xff08;如 Docker、LXC 等&#xff09;的核心技术之一&#xff0c;它通过隔离系统资源&#xff08;如进程、网络、文件系统等&#xff09;为进程提供独立的运行环境。其底层机制涉及内核数据结构、系统调用和进程管理。以下是其核心实…...

【每天认识一个漏洞】url重定向

&#x1f31d;博客主页&#xff1a;菜鸟小羊 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 常见应用场景 主要是业务逻辑中需要进行跳转的地方。比如登录处、注册处、访问用户信息、订单信息、加入购物车、分享、收…...

端口映射/内网穿透方式及问题解决:warning: remote port forwarding failed for listen port

文章目录 需求&#xff1a;A机器是内网机器&#xff0c;B机器是公网服务器&#xff0c;想要从公网&#xff0c;访问A机器的端口方式&#xff1a;端口映射&#xff0c;内网穿透&#xff0c;使用ssh打洞端口&#xff1a;遇到问题&#xff1a;命令执行成功&#xff0c;但是端口转发…...

Polardb开发者大会

这是第二次参加这个大会 还有不少老朋友 好多年没有这种经历了–大会讲的我不是很懂 10几年前参会&#xff0c;那时候自己不懂。后来就慢慢懂了。这些年参会都虽然还在不断学习&#xff0c;但是没觉得自己差距很大了。 这次出来很不一样&#xff0c;一堆新的技能&#xff0c;这…...

从二维随机变量到多维随机变量

二维随机变量 设 X X X和 Y Y Y是定义在同一样本空间 Ω \varOmega Ω上的两个随机变量&#xff0c;称由它们组成的向量 ( X , Y ) (X, Y) (X,Y)为二维随机变量&#xff0c;亦称为二维随机向量&#xff0c;其中称 X X X和 Y Y Y是二维随机变量的分量。 采用多个随机变量去描述…...

Vulnhub靶场 Kioptrix: Level 1.3 (#4) 练习

目录 0x00 环境准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用0x04 总结 0x00 环境准备 下载&#xff1a;https://download.vulnhub.com/kioptrix/Kioptrix4_vmware.rar 解压后得到的是vmdk文件。在vm中新建虚拟机&#xff0c;稍后安装操作系统&#xff0c;系统选…...

权重生成图像

简介 前面提到的许多生成模型都有保存了生成器的权重,本章主要介绍如何使用训练好的权重文件通过生成器生成图像。 但是如何使用权重生成图像呢? 一、参数配置 ima_size 为图像尺寸,这个需要跟你模型训练的时候resize的时候一样。 latent_dim为噪声维度,一般的设置都是…...

实时时钟(RTC)/日历芯片PCF8563的I2C读写驱动(2):功能介绍

0 参考资料 PCF8563数据手册&#xff08;第 11 版——2015 年 10 月 26 日&#xff09;.pdf 1 功能介绍 1.1 实时时钟&#xff08;RTC&#xff09;/日历 &#xff08;1&#xff09;PCF8563支持实时时钟&#xff08;RTC&#xff09;&#xff0c;提供时、分、秒信息。对应寄存器…...

猿大师播放器:HTML内嵌VLC播放RTSP视频流,无需转码,300ms级延迟,碾压服务器转码方案

在智慧城市、工业安全、应急指挥等关键领域&#xff0c;实时视频监控已成为守护生命与财产的核心防线‌。然而&#xff0c;行业普遍面临三大矛盾&#xff1a; ‌实时性要求与高延迟矛盾‌&#xff1a;火灾蔓延速度达1米/秒&#xff0c;化工泄漏扩散仅需数秒&#xff0c;传统方…...

牛客刷题自留-深度学习

1、当在卷积神经网络中加入池化层(pooling layer)时&#xff0c;平移变换的不变性会被保留&#xff0c;是吗&#xff1f; 正常答案: C A 不知道 B 看情况 C 是 D 否 平移变换不变性的概念 平移变换不变性指的是当输入图像发生小范围的平移时&#xff0c;模型的输出结果不会发…...

AI 时代下,操作系统如何进化与重构?

AI 时代下&#xff0c;操作系统如何进化与重构&#xff1f; AI时代服务器操作系统技术挑战2024 龙蜥操作系统大会最关注的是哪些议题分享与讨论&#xff1f;对于操作系统未来的发展趋势&#xff0c;有哪些观察和建议 2024 龙蜥操作系统大会&#xff08;OpenAnolis Conference&a…...

Hadoop最新版本hadoop-3.4.1搭建伪分布式集群以及相关报错解决

一&#xff1a;概述 Hadoop 是一个开源的分布式计算框架&#xff0c;广泛应用于大数据处理。伪分布式集群是 Hadoop 的一种部署模式&#xff0c;它可以在单台机器上模拟集群环境&#xff0c;适合初学者进行学习和实验。本文将详细介绍如何在单台机器上搭建 Hadoop 3.4.1 的伪分…...

Android SDK与NDK的区别

Android SDK&#xff08;Software Development Kit&#xff09;与NDK&#xff08;Native Development Kit&#xff09;在Android应用开发中各自扮演着重要角色&#xff0c;它们之间存在显著的区别。以下是Android SDK与NDK的主要区别&#xff1a; 一、定义与用途 Android SDK…...

【保姆级视频教程(二)】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测!

【2025全站首发】YOLOv12训练数据集构建&#xff1a;标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测&#xff01; 文章目录 1. 数据集准备1.1 标签格式转换1.2 数据集划分1.3 yaml配置文件创建 2. 训练验证 1. 数据集准备 示例数据集下载链接&#xff1a;P…...

smolagents学习笔记系列(八)Examples - Master you knowledge base with agentic RAG

这篇文章锁定官网教程中 Examples 章节中的 Master you knowledge base with agentic RAG 文章&#xff0c;主要介绍了如何将 agent 和 RAG 结合使用。 官网链接&#xff1a;https://huggingface.co/docs/smolagents/v1.9.2/en/examples/rag&#xff1b; Agentic RAG 在之前的…...

满血版DeepSeek R1使用体验

硅基流动的满血版DeepSeek&#xff0c;通过CheeryStudio可以轻松访问&#xff0c;告别DeepSeek官网服务器繁忙&#xff0c;https://cloud.siliconflow.cn/i/ewlWR6A9 即可注册 https://cloud.siliconflow.cn/i/ewlWR6A9https://cloud.siliconflow.cn/i/ewlWR6A9 一、硅基流动平…...

Java类中的this操作

在Java中,`this` 是一个关键字,用于引用当前对象的实例。它通常在类的方法或构造器中使用,主要有以下几种用途: 1. 区分成员变量和局部变量 当成员变量与局部变量同名时,使用 `this` 可以明确引用当前对象的成员变量。 public class Person { private String name; …...

LeetCode刷题---双指针---532

数组中的 k-diff 数对 532. 数组中的 k-diff 数对 - 力扣&#xff08;LeetCode&#xff09; 题目 给你一个整数数组 nums 和一个整数 k&#xff0c;请你在数组中找出 不同的 k-diff 数对&#xff0c;并返回不同的 k-diff 数对 的数目。 k-diff 数对定义为一个整数对 (nums[…...

cpp单调栈模板

题目如下 如果利用暴力解法&#xff0c;时间复杂度是O&#xff08;n^2&#xff09; 只能过60%的数据 AC解法&#xff1a; 利用单调栈的算法&#xff0c;单调栈里存的是之前遍历过的元素的下标&#xff0c;如果满足while的条件就将栈顶元素记录&#xff0c;然后将其弹出&#x…...

PyCharm 的使用 + PyCharm快捷键 + 切换中文界面

2025 - 02 - 27 - 第 62 篇 Author: 郑龙浩 / 仟濹 【PyCharm的使用】 文章目录 如何使用Pycharm1 新建工程&#xff0c;新建 .py 文件&#xff0c;运行2 常用快捷键3 其他快捷键 - DeepSeek 总结如下**代码编辑****导航与定位****查找与替换****运行与调试****代码重构****其…...

机器学习与深度学习在地球物理勘探中的应用:基于电阻率数据预测极化率模型

1. 项目概述与核心价值在花岗岩这类地质条件复杂的地区搞勘探&#xff0c;最头疼的就是地下情况“看不清”。传统的电阻率&#xff08;ERT&#xff09;和激发极化&#xff08;IP&#xff09;联合反演&#xff0c;就像用一把刻度模糊的尺子去量一块表面坑洼不平的石头——面对高…...

Hitboxer:开源SOCD清理工具,3分钟提升游戏操作精准度

Hitboxer&#xff1a;开源SOCD清理工具&#xff0c;3分钟提升游戏操作精准度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否在激烈的游戏对抗中经历过这样的挫败&#xff1a;同时按下左右方向键时角色卡…...

从多路复用到三维光阵:Arduino驱动8x8x8 LED立方体全解析

1. 项目概述&#xff1a;用Arduino点亮一个三维世界几年前&#xff0c;我第一次在创客展上看到一个8x8x8的LED立方体&#xff0c;那种由数百个光点构成的、在三维空间中流动的动画效果&#xff0c;瞬间就把我吸引住了。它不像普通的平面LED屏&#xff0c;而是真正有“深度”的光…...

亚马逊 Rufus 关停,Alexa 正式上线:卖家必须读懂的6条新规则

2026年5月13日&#xff0c;亚马逊官方正式宣布&#xff0c;下线Rufus&#xff0c;推出全新AI购物助手&#xff1a;Alexa for Shopping。但是&#xff0c;这不是粗暴地直接下线 Rufus&#xff0c;而是一次购物AI底层架构的重组 —— 将 Rufus 的商品专长 与 Alexa的用户理解力&a…...

Claude本地化部署终极方案(企业级容器化全栈手册):支持Anthropic API兼容、流式响应、模型热切换与RBAC权限隔离

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Claude本地化部署的架构全景与企业级价值定位 Claude本地化部署并非简单地将模型权重下载后运行&#xff0c;而是一套融合推理引擎优化、安全沙箱隔离、API网关治理与可观测性集成的端到端架构体系。其核心目…...

终极艾尔登法环帧率解锁指南:轻松突破60FPS限制

终极艾尔登法环帧率解锁指南&#xff1a;轻松突破60FPS限制 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenRing…...

全链路压测实战:双十一级别的流量,我是这样扛住的

作为一名在质量保障领域摸爬滚打多年的测试工程师&#xff0c;我深知传统的单接口压测在如今分布式架构下的无力感。当业务流量达到双十一这种脉冲式、高并发的级别时&#xff0c;任何一个非核心链路上的“短板”都可能引发系统性的雪崩。全链路压测不再是选择题&#xff0c;而…...

Sora 2 MOV导出画质崩坏真相:HDR10元数据丢失、BT.2020色域截断、帧率标志位误写——3大隐性缺陷紧急修复方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Sora 2 MOV导出画质崩坏的系统性认知 Sora 2 在生成高保真视频后&#xff0c;导出为 MOV 格式时频繁出现色度抽样失真、动态范围压缩、帧间伪影加剧等现象&#xff0c;其本质并非单一环节失效&#xff…...

BiliRoamingX:彻底解决B站体验限制的完整增强方案

BiliRoamingX&#xff1a;彻底解决B站体验限制的完整增强方案 【免费下载链接】BiliRoamingX-integrations BiliRoamingX integrations and patches powered by ReVanced. 项目地址: https://gitcode.com/gh_mirrors/bi/BiliRoamingX-integrations 你是否曾为B站的内容区…...

保姆级教程:在Ubuntu上配置Frida环境,搞定Android App的IO重定向与签名绕过

在Ubuntu上构建Android逆向工程环境&#xff1a;Frida实战与IO重定向技术解析 对于习惯Linux环境的安全研究人员而言&#xff0c;Windows-centric的逆向工具链往往带来诸多不便。本文将系统性地介绍如何在Ubuntu上搭建完整的Android逆向环境&#xff0c;并深入探讨如何利用Frid…...