全是干货的技术公众号
前两文中,讲了Linux容器最基础的两种技术
- Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界”
- Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙
这么一搞,进程就真的被“装”在了一个与世隔绝的房间里,而这些房间就是PaaS项目赖以生存的应用“沙盒”。
还有一个问题是:墙外的我们知道他的处境了,墙内的他呢?
1 容器里的进程眼中的文件系统
也许你会认为这是一个关于Mount Namespace的问题 容器里的应用进程,理应看到一份完全独立的文件系统。这样,它就可以在自己的容器目录(比如/tmp)下进行操作,而完全不会受宿主机以及其他容器的影响。
那么,真实情况是这样吗?
“左耳朵耗子”叔在多年前写的一篇关于Docker基础知识的博客里,曾经介绍过一段小程序。 这段小程序的作用是,在创建子进程时开启指定的Namespace。
下面,我们不妨使用它来验证一下刚刚提到的问题。
#define _GNU_SOURCE#include #include #include #include #include #include #include #define STACK_SIZE (1024 * 1024)static char container_stack[STACK_SIZE];char* const container_args[] = { "/bin/bash