容器底层实现技术: cgroup , namespace , unionfsdocker
1.cgroup 实现了资源的限额:CPU,内存,硬盘
2.namespace 实现了资源隔离
3.unionfs 联合文件系统spa
cgroup实例:进程
# docker run -d -m 100M httpd -----------实现了对内存的限额内存
namespace:资源
Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User路由
- Mount namespace : Mount namespace 让容器看上去拥有整个文件系统
- UTS namespace : UTS namespace 让容器有本身的 hostname。 默认状况下,容器的 hostname 是它的短ID,能够经过 -h 或 --hostname 参数设置。
- IPC namespace : 让容器拥有本身的共享内存和信号量(semaphore)来实现进程间通讯,而不会与 host 和其余容器的 IPC 混在一块儿
- PID namespace : 容器在 host 中以进程的形式运行。容器内进程的 PID 不一样于 host 中对应进程的 PID,容器中 PID=1 的进程固然也不是 host 的systemd进程。也就是说:容器拥有本身独立的一套 PID,这就是 PID namespace 提供的功能。
-
Network namespace : 让容器拥有本身独立的网卡、IP、路由等资源。io
- User namespace : 让容器可以管理本身的用户,host 不能看到容器中建立的用户。