容器底层实现技术: cgroup , namespace , unionfs
1.cgroup 实现了资源的限额:CPU,内存,硬盘
2.namespace 实现了资源隔离
3.unionfs 联合文件系统
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、路由等资源。
- User namespace : 让容器能够管理自己的用户,host 不能看到容器中创建的用户。