《深入剖析Kubernetes - 05 | 白话容器基础(一):从进程说开去》
容器的实现主要应用了namespace 和 cgroups 的机制
其中namespace的实现,实际上就是在底层调用clone() 时,加一个CLONE_NEWPID 参数,为进程创建一个新的namespace,屏蔽其他进程pid,使其看不到宿主机上真正的进程空间,从而认为自己就是pid 1 的主进程
int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL);
除了PID,还实现了mount、uts、ipc、user、network 的namespace 隔离
PS:从宿主机的视角来看,这些通过namespace隔离的进程跟其他进程没有什么区别
即宿主机上可以看到运行在容器中的进程