当前位置: 首页 > 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)
http://www.lryc.cn/news/356206.html

相关文章:

  • 【前端学习笔记】HTML基础
  • JS Lab
  • Vue:快速上手
  • HTML并集,交集,子代,后代选择器
  • 关于pdfbox读取pdf
  • 汽车电子零部件(14):TMS热管理系统
  • 代码模板,Cookie和Session
  • Nginx配置及优化
  • HashMap在Go与Java的底层实现与区别
  • 搜维尔科技:使用Haption Virtuose 6D 力反馈通过机器人和虚拟现实完成远程操作项目
  • 【Python】WHEELTEC GPS G60主代码读取传感器数据代码(Windows系统)
  • 【Vue】Vue2与Vue3的区别
  • 马斯克的 xAI 帝国!60亿融资背后的超级布局?
  • 互联网医院开发:引领智慧医疗新时代
  • 民国漫画杂志《时代漫画》第18期.PDF
  • java.lang.NumberFormatException: For input string:
  • 从零开始搭建Springboot项目脚手架4:保存操作日志
  • 持续总结中!2024年面试必问 20 道 Rocket MQ面试题(一)
  • 生成式AI的GPU网络技术架构
  • 旅游卡在哪里拿货?千益畅行旅游卡源头
  • 代码随想录算法训练营第四十一天| 509. 斐波那契数 、70. 爬楼梯 、746. 使用最小花费爬楼梯
  • Ribbon负载均衡(自己总结的)
  • Leetcode 力扣92. 反转链表 II (抖音号:708231408)
  • OSI七层模型和TCP/IP四层模型的区别
  • 在虚拟机上安装MySQL和Hive
  • Vue 2 和 Vue 3 中同步和异步
  • ssm150旅游网站的设计与实现+jsp
  • 【加密与解密(第四版)】第十四章笔记
  • 鸿蒙系统和安卓系统通过termux搭建Linux系统—Centos
  • 数据结构的希尔排序(c语言版)