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

自己动手写docker——Namespace

Linux Namespace

linux Namespace用于隔离一系列的系统资源,例如pid,userid,netword等,借助于Linux Namespace,可以实现容器的基本隔离。

Namespce介绍

Namespace类型系统调用参数作用
Mount NamespaceCLONE_NEWNS隔离挂载点视图,简单来说隔离了mount命令
UTS NamespaceCLONE_NEWUTS隔离hostname
IPC NamespaceCLONE_NEWIPC隔离ipc与message queue
PID NamespaceCLONE_NEWPID隔离进程PID
Network NamespaceCLONE_NEWNET隔离network
User NamespaceCLONE_NEWUSER隔离userid和groupid

下面我们用Go程序创建一个隔离的进程

package main
​
import ("os""os/exec""syscall"
)
​
func main() {cmd := exec.Command("bash")cmd.SysProcAttr = &syscall.SysProcAttr{Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWIPC | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS |syscall.CLONE_NEWUSER | syscall.CLONE_NEWNET,}cmd.Stdin = os.Stdincmd.Stdout = os.Stdoutcmd.Stderr = os.Stderrif err := cmd.Run(); err != nil {panic(err)}
​
}

我们可以通过一些命令来查看我们确实处于在了新的Namespace中,当然,因为我们使用了CLONE_NEWUSER参数,这让我们在Namespace中失去了用户身份,我们不能以root用户进行操作,如果要以root身份验证其他Namespace,需要删除CLONE_NEWUSER,然后以root身份运行程序。

这里我们可以简单验证PID Namespace,可以看到PID为1,隔离了PID

echo $$
1

验证User Namespace

id
uid=65534(nobody) gid=65534(nogroup) 组=65534(nogroup)

相关文章:

  • 【chagpt】广泛使用API之前:考虑成本和数据隐私
  • 01-05.Vue自定义过滤器
  • 在树莓派3B+中下载opencv(遇到的各种问题及解决)
  • 宿舍管理系统代码详解(操作界面)
  • 人人皆是黑客?EvilProxy推出一键反向代理服务
  • vue深度选择器(:deep​)
  • LeetCode 343. 整数拆分 (dp动态规划)
  • Xshell远程连接服务器需要哪些依赖包、
  • Python条件分支与循环
  • 【全开源】点餐小程序系统源码(ThinkPHP+FastAdmin+UniApp)
  • 快速搭建 WordPress 外贸电商网站指南
  • Linux——多线程(一)
  • 设计模式19——观察者模式
  • EXCEL VBA终极提速,超级公式,算法优化
  • Oracle EBS API创建AP发票报错:ZX_TAX_STATUS_NOT_EFFECTIVE和ZX_REGIME_NOT_EFF_IN_SUBSCR-
  • CSS实用技巧
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript HTML DOM
  • Joomla 2.x, 3.x useful code cheatsheet
  • unity如何实现一个固定宽度的orthagraphic相机
  • 从零开始学习部署
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端学习笔记之观察者模式
  • 强力优化Rancher k8s中国区的使用体验
  • 使用docker-compose进行多节点部署
  • 算法---两个栈实现一个队列
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 小程序开发之路(一)
  • ​iOS实时查看App运行日志
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (2)MFC+openGL单文档框架glFrame
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (四)js前端开发中设计模式之工厂方法模式
  • (学习日记)2024.01.19
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • .net 7 上传文件踩坑
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • /usr/bin/env: node: No such file or directory
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [Android] Binder 里的 Service 和 Interface 分别是什么
  • [Android]Tool-Systrace
  • [C#基础]说说lock到底锁谁?
  • [CC-FNCS]Chef and Churu
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [CR]厚云填补_多云条件下土地覆盖分割的多模态多任务学习
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍
  • [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口