容器和主机用户空间使用virsh创build时共享

我正在尝试在redhat中设置一个容器。 容器也应该运行与主​​机相同的redhat版本。 在探索这些时,我碰到了virsh和docker。 Virsh支持基于主机的容器,并与主机共享用户空间。 在这里,我对用户空间感到困惑。 无论是文件系统空间还是其他一些东西。 任何人都可以澄清我呢? 另外在哪些场景/案例virsh(基于主机的容器)可以使用,以便我可以断定是否更好使用virsh或docker。 在我的情况下,我需要在redhat主机中设置一个redhat容器,并在每个容器中运行同一进程的多个实例。 容器应该在不使用networking接口的情况下相互交换数据。

这应该有助于澄清: http : //rhelblog.redhat.com/2015/07/29/architecting-containers-part-1-user-space-vs-kernel-space/

这听起来像是你真的想用-v绑定挂载来共享数据。 这是一个未来一天的文章:-)

https://docs.docker.com/userguide/dockervolumes/

当前的内核不支持用户命名空间。 这是当前集装箱化解决scheme的已知限制。 不幸的是,用户名空间是在最新的内核版本中实现的(从内核3.8开始) http://kernelnewbies.org/Linux_3.8,尽pipe它在许多主stream发行版中还没有启用。

这是现在容器最强的限制之一,如果你是一个容器中的根(ID 1),那么你是在操作容器的机器上的根。

这是一个影响任何基于LXC的产品的问题,尽pipe有强大的推动力来解决这个问题。 这实际上是一个需要的东西!

替代scheme是去硬Selinux监狱或与贫困的用户帐户和分配不同的用户每个容器。

来自Libvirt文档https://libvirt.org/drvlxc.html

用户和组隔离如果guest虚拟机configuration未列出任何ID映射,则容器内使用的用户和组ID将与容器外使用的用户和组ID匹配。 另外,与容器中的进程相关联的function将推断出与主机中的进程相同的特权。 这对安全性具有明显的影响,因为容器内的root用户将能够访问容器可见的root所拥有的任何文件,并且执行或多或less的任何特权内核操作。 在没有来自sVirt的额外保护的情况下,这意味着容器内的根用户实际上与主机中的根用户一样强大。 没有根用户的安全隔离。

引入了ID映射function,可以更加严格地控制容器内用户的权限。 它允许应用程序定义诸如“容器映射中的用户ID 0到主机中的用户ID 1000”的规则。 此外,与function相关的权限也有所减less,因此不能用于从容器环境中退出。 用户命名空间的完整描述超出了本文的范围,但是LWN对这个主题有很好的说明。 从libvirt的angular度来看,要记住的关键是为容器XMLconfiguration中的用户和组定义一个ID映射,导致libvirt激活用户名称空间function。