我知道这很迂腐,但我跑步man namespaces
,我明白了
命名空间将全局系统资源包装在抽象中,使命名空间内的进程看起来拥有自己的全局资源的隔离实例。对全局资源的更改对于命名空间成员的其他进程可见,但对于其他进程不可见。命名空间的一个用途是实现容器。
当它说“实施容器“,除了命名空间隔离之外,我还需要什么才能将我正在做的事情称为“容器”?或者,更具体地说,如果我运行unshare
在不同的用户命名空间中启动一个程序,那么它是一个“容器”吗?
答案1
内核没有定义容器;看什么是 systemd-spawn 创建的“轻量级命名空间容器”?。通常理解的容器提供隔离(使用命名空间)和资源控制(使用 cgroup),以及进一步级别的保护,例如 seccomp 过滤器。它们结合了多个概念,它们不是内核直接提供的一流概念的实例。
unshare
处理命名空间方面的事情,您必须添加其余部分(从而实现容器运行时)。
答案2
Linux基金会
在 Linux 基金会上寻找这个的实际定义,似乎“容器”不是由隔离级别或权限控制来定义的——这些是“建筑模块”——但相反,
- 从映像实例化,其中包括应用程序、其依赖项和用户空间库
- 在主机内核上运行
- 受外部资源限制和隔离
所以我想这里真正的问题是 shell 脚本是否unshare
是取消共享。