Linux 容器技术(Linux Containers,LXC)
Linux 操作系统上提供的一种操作系统级虚拟化 (Operating-system-level virtualization)技术
允许在同一 Linux 内核的基础上对不同进程族的环 境进行划分和隔离。
容器技术使用 Linux 内核提供的 namespace 机制隔离应用环境,同时使用 cgroups 机制限制进程资源
Docker 是 Docker.Inc 发布的一款开源 Linux 容器引 擎,与2013年3月首次发布
Linux cgroups 机制
cgroups 最早在2006年开始由 Google 的工程师发起, 并在2008年1月首次合并到 Linux 主线内核版本 2.6.14
目的:为加入控制组的进程提供资源的限制和审计
- 这里的”资源”包括进程所使用的 CPU,内存,磁盘 I/O 和网络
Linux 将 cgroup 实现为一个文件系统,通常位于 /sys/fs/cgroup 下
- 目录下包含 cpu,memory,devices 等资源
- 可以在相应资源下创建分组写入资源限制
- 然后将进程加入分组来对进程资源进行控制。
支持
在编译时启用
-逐一指定需要支持的命名空间
-一般性支持总是会编译到内核中
默认命名空间
-没有显式指定的话,则每个进程关联到一个默 认的命名空间
创建
创建新进程
- Flag:与父进程共享命名空间 or 建立新命名空间
unshare系统调用
- 分离进程上下文中与其他进程共享的部分,包 括命名空间
实现
命名空间的实现需要两个部分
- 内核子系统命名空间 :将此前所有的全局组件包装到命名空间中
- 关联 : 将给定进程关联到所属各个命名空间
nsproxy
struct nsproxy
用于汇集指向特定于子系统的命名空间包装器的指针
通过pid 和task_struct互推
来源:oschina
链接:https://my.oschina.net/u/4417586/blog/4336099