yum与Red Hat Network Subscription在rhel Docker镜像中如何工作?

红帽企业Linux 7包括对运行Docker容器的官方支持,红帽提供了一套官方的rhel Docker镜像。 这些映像的一个有趣特性是可以通过主机的红帽networking订阅安装包,而不必在容器内执行任何configuration。

引用https://access.redhat.com/articles/881893#createimage :

“对于当前的Red Hat Docker版本,从Red Hat提取的默认RHEL 7 Docker镜像将能够利用主机系统提供的RHEL 7权利,因此,只要您的Docker主机已经正确订阅并且存储库是启用了需要在容器中获取所需的软件(并且可以从Docker主机访问Internet),那么应该能够从RHEL 7软件存储库安装软件包。

我担心的是,实现这一目标的机制是相当不透明的。 例如,当用rhel7.1映像启动一个新的容器时,即使没有configurationhttp代理环境variables,也可以运行yum install foo 。 如果不理解这种机制,系统pipe理员可能会受到主机系统,Docker守护程序和正在运行的容器之间未知交互的影响。 这也表明,主机和集装箱之间的正常隔离在某种程度上是妥协的(虽然是以良性的方式)。

为了说明一下:这个订阅支持是如何实现的,它是否依赖于Red Hat通过Subscriptionnetworking提供的Docker守护进程的自定义构build?

Red Hat给docker了一个补丁,叫做“秘密”补丁,它在运行时将授权信息装载到容器中。

您可以在projectatomic / docker仓库中看到更好的修补程序描述和上游PR的链接:

https://github.com/projectatomic/docker/tree/docker-1.13.1-rhel#add-rhel-super-secrets-patchpatch

请注意,您需要select其中一个分支(链接转到“docker-1.3.1-rhel”分支)以查看所有传送的补丁信息。

了解了Red Hat Satellitepipe理的虚拟机是如何获得许可的,并且要closures@Leynos的评论,我预计会有类似于virt-who东西,这是一个与虚拟主机(vSphere,KVM等)交互的服务,查询它以查找虚拟机的详细信息。 然后在Satellite中进行必要的API调用,以允许VM使用主机的数据中心许可证。

我期望Red Hat docker守护程序提供了类似的东西,允许容器知道它是从订阅的Docker主机运行的,因此可以使用该订阅。

也从这里 :

重要说明:如本主题中所述,使用docker命令运行容器并不特别要求您注册RHEL Atomic Host系统并附加订阅。 但是,如果要在容器中运行yum install命令,容器必须从RHEL Atomic Host获得有效的订购信息,否则将失败。

所以,容器或守护进程中有东西可以查询主机来查找订阅信息(也可能是回购信息)。