0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述Docker的底层技术原理之Namespace

阿铭linux 来源:今日头条 作者:云技术趣谈 2021-07-21 09:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Docker的空间隔离使用的是namespace(空间),它是内核提供的一种空间隔离,在一个空间下,每个进程看到的视图是一致的,相应的如果不在一个空间下看到资源视图是不一致的,举个例子,如果两个进程在同一个网络命令空间下,那么他们看到的网络信息(网卡、IP、路由等)是一样的,可以通过localhost的方式互相访问。常用的有6种namespace,在Linux 内核4.6之后又添加了Cgroup这namespace,5.6 之后又添加了时钟namespace。

Namespace系统调用参数隔离内容

UTSCLONE_NEWUTS主机名与域名

IPCCLONE_NEWIPC信号量、消息队列和共享内存

PIDCLONE_NEWPID进程编号

NetworkCLONE_NEWNET网络设备、网络栈、端口等等

MountCLONE_NEWNS挂载点(文件系统)

UserCLONE_NEWUSER用户和用户组

CgroupCLONE_NEWCGROUPCgroup的根目录

TimeCLONE_NEWTIME时钟

这里有个小细节,上面表格创建Mount Namespace的系统调用参数是CLONE_NEWNS,而不是CLONE_NEWMOUNT。从字面理解是创建一个命名空间的意思,这是由于历史原因导致的,因为Mount Namespace是第一个namespace,内核的开发者可能也没有预料到后续还有其它的namespace的加入,所以就先把CLONE_NEWNS给占用了。

可见,namespace的隔离其实并不充分,除了上面的隔离能力,其他的都一样。譬如,时钟在内核5.6版本之前,所有容器和操作系统都共享同一个时钟,如果修改了操作系统的时间,所有容器都时间都会变化。

namespace实现原理也非常简单,每个进程(task_struct)都有一个关于namespace的属性nsproxy,表示自己所属的namespace。

struct task_struct { 。。.

/* namespaces */

struct nsproxy *nsproxy;

。。.

}

其中的nsproxy就是指向各种namespace的一个代理。

当新进程被创建后会继承其父进程的namespace,这就是为啥一个容器里面的所有进程都共享namespace。在Linux集群上面,通过读取“/proc/进程ID/ns/”下的文件可以获取到每个进程对应的namespace。

文章转载:https://os.51cto.com/art/202107/671347.htm

(版权归原作者所有,侵删)

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Docker
    +关注

    关注

    0

    文章

    537

    浏览量

    14397

原文标题:Docker内核技术原理之Namespace

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Docker容器网络模式全解析

    容器网络是Docker使用中最容易出问题的部分。容器之间怎么通信、容器怎么访问外网、外部怎么访问容器内的服务——这三个问题搞不清楚,排查网络故障就是抓瞎。
    的头像 发表于 02-26 16:39 451次阅读

    如何在2026年Rocky Linux(8、9和10)上安装Docker

    Docker 已成为现代应用部署、开发和基础设施自动化的核心技术。如果你在服务器或VPS上运行Rocky Linux,学会在Rocky Linux上安装Docker是你2026年能掌握的最宝贵技能
    的头像 发表于 01-12 17:21 1819次阅读

    香港服务器支持Docker和Kubernetes吗?

    在云原生技术成为主流的今天,Docker和Kubernetes(K8s)已成为现代化应用开发和部署的事实标准。对于选择香港服务器的开发者与企业而言,一个核心问题是:香港服务器能否完美支持Docker
    的头像 发表于 10-21 15:47 891次阅读

    【HZ-T536开发板免费体验】Docker 环境安装及应用

    一、检查 Docker 安装状态 板子提示“command not found”或无版本信息,说明 Docker 未安装,如有需要请自行安装 二、Docker 环境安装 首先更新系统包索引并安装
    发表于 09-01 17:59

    深入剖析Docker全链路安全防护策略

    在云原生时代,Docker容器安全已成为运维工程师必须面对的核心挑战。本文将从实战角度深入剖析Docker全链路安全防护策略,涵盖镜像构建、容器运行、网络隔离等关键环节,助你构建企业级安全防护体系。
    的头像 发表于 08-18 11:17 1254次阅读

    Docker容器安全攻防实战案例

    在云原生时代,Docker已成为现代应用部署的基石。然而,容器化带来便利的同时,也引入了新的安全挑战。作为一名在生产环境中管理过数千个容器的运维工程师,我将通过真实的攻防实战案例,带你深入了解Docker安全的每一个细节。
    的头像 发表于 08-05 09:52 1555次阅读

    干货分享 | RK3588 Ubuntu系统Docker容器使用指南

    前言:在瑞芯微RK3588高性能AIoT平台上运行Ubuntu系统时,Docker容器技术能极大提升开发部署效率。通过轻量级虚拟化实现环境隔离与快速迁移,本文将从零开始详解RK3588平台
    的头像 发表于 06-27 12:01 4166次阅读
    干货分享 | RK3588 Ubuntu系统<b class='flag-5'>Docker</b>容器使用指南

    忆联 Docker+MySQL 流控方案:打造安全高效存储底座,释放 AI 极致性能

    探讨基于Docker部署的MySQL数据库在AI应用中的关键作用。通过忆联PCIe5.0企业级SSD(UH812a)实测验证,展示了Namespace技术与QoS优化策略如何实现存储资源的精细化管理
    的头像 发表于 06-26 13:53 564次阅读
    忆联 <b class='flag-5'>Docker</b>+MySQL 流控方案:打造安全高效存储底座,释放 AI 极致性能

    docker无法启用怎么解决?

    mengxing@mengxing-virtual-machine:/etc/docker$ sudo systemctl daemon-reload
    发表于 06-23 07:17

    Docker Volume管理命令大全

    Docker Volume管理命令大全
    的头像 发表于 05-28 17:14 1070次阅读

    如何使用Docker部署大模型

    随着深度学习和大模型的快速发展,如何高效地部署这些模型成为了一个重要的挑战。Docker 作为一种轻量级的容器化技术,能够将模型及其依赖环境打包成一个可移植的容器,极大地简化了部署流程。本文将详细介绍如何使用 Docker 部署
    的头像 发表于 05-24 16:39 1336次阅读

    集成Docker,解锁 HMI/网关的定制化应用

    工业自动化领域对定制化HMI/网关的需求日益增长,而传统设备因功能固化难以满足快速迭代需求。宏集HMI&网关通过集成Docker技术,赋予设备超强的灵活性和扩展性,满足企业的个性化需求。
    的头像 发表于 05-22 11:06 648次阅读
    集成<b class='flag-5'>Docker</b>,解锁 HMI/网关的定制化应用

    Docker Compose的常用命令

    大家好,今天给大家分享Docker Compose的常用命令,以及docker-compose文件的属性。Docker Compose 是一个用于定义和运行多容器 Docker 应用应
    的头像 发表于 04-30 13:40 1380次阅读

    Docker基本命令及其用例

    Docker 已迅速成为容器化应用程序的事实标准。作为开发人员或 DevOps 工程师/系统管理员,熟悉 Docker 对于高效部署现代、可移植的应用程序至关重要。
    的头像 发表于 04-30 10:04 831次阅读

    Docker常用命令大全

    Docker 是一种开源的应用容器引擎,广泛应用于开发、部署和运行分布式应用。掌握 Docker 常用命令对于开发人员和运维人员来说非常重要。本文将为大家整理常用的Docker 命令,并按照功能分为多个部分,帮助你高效使用
    的头像 发表于 04-22 12:47 988次阅读