项目说明

初始化目录

在开始做一个项目之前,先初始化一个go项目,并使用go module进行管理。

mkdir mydocker
cd mydocker
go mod init mydocker

Linux Namespace

Namespace是Kernel的一个功能,它可以隔离一系列的系统资源,比如PID、User ID、Network等。详细可以查看02-容器基础:隔离与限制

Namespace的API主要使用如下3个系统调用。

  • clone 创建新进程。根据系统调用参数来判断哪些类型的Namespace被创建,而且它们的子进程也会被包含到这些Namespace中。

  • unshare 将进程移出某个Namespace。

  • setns 将进程加入到Namespace中。

目前Linux一共实现了以下几种不同类型的NameSpace。

  • UTS Namespace:主要用来隔离nodename和daminname这两个系统标识。

  • IPC Namespace:主要用来隔离System V IPC和POSIX message queues。

  • PID NameSpace:主要用来隔离进程ID。

  • Mount NameSpace:主要用来隔离各个进程看到的挂载点视图。

  • User NameSpace:主要用来隔离用户和用户组ID。

  • Network NameSpace:用来隔离网络设备,IP地址端口等网络栈的NameSpace.

代码实现

查看共享挂载信息

Cgroup

最后更新于