【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。
- 每个 Network 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_namespace、pid_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 机制是实现容器化(如 Docker、LXC 等)的核心技术之一,它通过隔离系统资源(如进程、网络、文件系统等)为进程提供独立的运行环境。其底层机制涉及内核数据结构、系统调用和进程管理。以下是其核心实…...
【每天认识一个漏洞】url重定向
🌝博客主页:菜鸟小羊 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 常见应用场景 主要是业务逻辑中需要进行跳转的地方。比如登录处、注册处、访问用户信息、订单信息、加入购物车、分享、收…...
端口映射/内网穿透方式及问题解决:warning: remote port forwarding failed for listen port
文章目录 需求:A机器是内网机器,B机器是公网服务器,想要从公网,访问A机器的端口方式:端口映射,内网穿透,使用ssh打洞端口:遇到问题:命令执行成功,但是端口转发…...
Polardb开发者大会
这是第二次参加这个大会 还有不少老朋友 好多年没有这种经历了–大会讲的我不是很懂 10几年前参会,那时候自己不懂。后来就慢慢懂了。这些年参会都虽然还在不断学习,但是没觉得自己差距很大了。 这次出来很不一样,一堆新的技能,这…...
从二维随机变量到多维随机变量
二维随机变量 设 X X X和 Y Y Y是定义在同一样本空间 Ω \varOmega Ω上的两个随机变量,称由它们组成的向量 ( X , Y ) (X, Y) (X,Y)为二维随机变量,亦称为二维随机向量,其中称 X X X和 Y Y Y是二维随机变量的分量。 采用多个随机变量去描述…...
Vulnhub靶场 Kioptrix: Level 1.3 (#4) 练习
目录 0x00 环境准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用0x04 总结 0x00 环境准备 下载:https://download.vulnhub.com/kioptrix/Kioptrix4_vmware.rar 解压后得到的是vmdk文件。在vm中新建虚拟机,稍后安装操作系统,系统选…...
权重生成图像
简介 前面提到的许多生成模型都有保存了生成器的权重,本章主要介绍如何使用训练好的权重文件通过生成器生成图像。 但是如何使用权重生成图像呢? 一、参数配置 ima_size 为图像尺寸,这个需要跟你模型训练的时候resize的时候一样。 latent_dim为噪声维度,一般的设置都是…...
实时时钟(RTC)/日历芯片PCF8563的I2C读写驱动(2):功能介绍
0 参考资料 PCF8563数据手册(第 11 版——2015 年 10 月 26 日).pdf 1 功能介绍 1.1 实时时钟(RTC)/日历 (1)PCF8563支持实时时钟(RTC),提供时、分、秒信息。对应寄存器…...
猿大师播放器:HTML内嵌VLC播放RTSP视频流,无需转码,300ms级延迟,碾压服务器转码方案
在智慧城市、工业安全、应急指挥等关键领域,实时视频监控已成为守护生命与财产的核心防线。然而,行业普遍面临三大矛盾: 实时性要求与高延迟矛盾:火灾蔓延速度达1米/秒,化工泄漏扩散仅需数秒,传统方…...
牛客刷题自留-深度学习
1、当在卷积神经网络中加入池化层(pooling layer)时,平移变换的不变性会被保留,是吗? 正常答案: C A 不知道 B 看情况 C 是 D 否 平移变换不变性的概念 平移变换不变性指的是当输入图像发生小范围的平移时,模型的输出结果不会发…...
AI 时代下,操作系统如何进化与重构?
AI 时代下,操作系统如何进化与重构? AI时代服务器操作系统技术挑战2024 龙蜥操作系统大会最关注的是哪些议题分享与讨论?对于操作系统未来的发展趋势,有哪些观察和建议 2024 龙蜥操作系统大会(OpenAnolis Conference&a…...
Hadoop最新版本hadoop-3.4.1搭建伪分布式集群以及相关报错解决
一:概述 Hadoop 是一个开源的分布式计算框架,广泛应用于大数据处理。伪分布式集群是 Hadoop 的一种部署模式,它可以在单台机器上模拟集群环境,适合初学者进行学习和实验。本文将详细介绍如何在单台机器上搭建 Hadoop 3.4.1 的伪分…...
Android SDK与NDK的区别
Android SDK(Software Development Kit)与NDK(Native Development Kit)在Android应用开发中各自扮演着重要角色,它们之间存在显著的区别。以下是Android SDK与NDK的主要区别: 一、定义与用途 Android SDK…...
【保姆级视频教程(二)】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测!
【2025全站首发】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测! 文章目录 1. 数据集准备1.1 标签格式转换1.2 数据集划分1.3 yaml配置文件创建 2. 训练验证 1. 数据集准备 示例数据集下载链接:P…...
smolagents学习笔记系列(八)Examples - Master you knowledge base with agentic RAG
这篇文章锁定官网教程中 Examples 章节中的 Master you knowledge base with agentic RAG 文章,主要介绍了如何将 agent 和 RAG 结合使用。 官网链接:https://huggingface.co/docs/smolagents/v1.9.2/en/examples/rag; Agentic RAG 在之前的…...
满血版DeepSeek R1使用体验
硅基流动的满血版DeepSeek,通过CheeryStudio可以轻松访问,告别DeepSeek官网服务器繁忙,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 数对 - 力扣(LeetCode) 题目 给你一个整数数组 nums 和一个整数 k,请你在数组中找出 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。 k-diff 数对定义为一个整数对 (nums[…...
cpp单调栈模板
题目如下 如果利用暴力解法,时间复杂度是O(n^2) 只能过60%的数据 AC解法: 利用单调栈的算法,单调栈里存的是之前遍历过的元素的下标,如果满足while的条件就将栈顶元素记录,然后将其弹出&#x…...
PyCharm 的使用 + PyCharm快捷键 + 切换中文界面
2025 - 02 - 27 - 第 62 篇 Author: 郑龙浩 / 仟濹 【PyCharm的使用】 文章目录 如何使用Pycharm1 新建工程,新建 .py 文件,运行2 常用快捷键3 其他快捷键 - DeepSeek 总结如下**代码编辑****导航与定位****查找与替换****运行与调试****代码重构****其…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
