摘要: Docker Notes系列为学习Docker笔记,本文是学习namespace 资源隔离的笔记
对于开发者而言,Docker的大热让人们思考容器隔离的实现,如对主机名与域名的隔离、资源隔离、网络的隔离、进程间通信的隔离、用户权限的隔离、PID的隔离等。Linux内核中提供了以下6种namespace隔离的系统调用
namespace | 系统调用参数 | 隔离内容 |
---|---|---|
UTS | CLONE_NEWUTC | 主机名与域名 |
IPC | CLONE_NEWIPC | 信号量、消息队列、共享内存 |
PID | CLONE_NEWPID | 进程编号 |
Network | CLONE_NEWNET | 网络栈、端口 |
Mount | CLONE_NEWNS | 文件系统 |
User | CLONE_NEWUSER | 用户与用户组 |
clone()
是fork()
的一种变种,fork()
是一种创建自身进程副本的操作,clone()可以通过flags参数来控制使用多少功能
fork()在父进程中返回新创建子进程的进程ID,在子进程中返回0,出现错误返回负值
[root@cf proc]# docker exec -ti 69aa00d7aa3b /bin/bash
root@69aa00d7aa3b:/data# echo $$
18
root@69aa00d7aa3b:/data# exit
exit
[root@cf proc]# echo $$
28512