容器本身就是一个进程,通过Namespace、Cgroups和rootfs组成。
- namespace:对容器进行隔离,让他活在自己的世界
- cgroups:在linux内核提供的一种可以限制单个进程的或者多个进程所使用资源的限制。
- rootfs: 文件系统隔离,生产的镜像就是为容器提供的文件系统的根文件系统
1. Namespace
Namespace是Linux内核从版本2.4.19开始陆续引入的namespace概念,目的是将某个特定的资源隔离出来,容器还是挂载在宿主主机上的可能PID为100,但是在容器通过使用namespace,在容器进程眼里就是他为PID=1.。
namespace | 作用 |
Mount | 隔离文件挂载点 |
UTS | 隔离主机名和域名 |
PID | 隔离PID |
Network | 隔离网络 |
IPC | 隔离进程通信 |
User | 隔离用户 |
2.Cgroups
Cgroups的是Linux内核的特性,蛀牙作用是限制、记录和隔离进程组使用的资源。
Cgroups | 作用 |
cpu | 限制cput使用 |
memory | 限制内存使用 |
blockIo | 限制I/O |
cpuSet | 限制CPU核心 |
device | 限制任务访问设备 |
frezzer | 控制恢复进程 |
ns | 空间子系统 |
device | 限制进程访问device |
net_cls | 用于标记网络数据包 |
net_proi | 设置网络设备优先级 |
3.rootfs
挂载在容器根目录上、同来为容器进程提供隔离后执行环节的文件系统。
层次 | 作用 |
只读层 | 以增量方式包含了操作系统的一部分 |
可读写层 | 用来存放增删改查,在docker修改完后如果可读写层有只读层文件,只读层的会被隐藏。 |
init层 | docker项目单独生成的一个层,用来存放/etc/hosts和/etc/resolv.conf |