Red Hat Enterprise Linux 7 包含对运行 Docker 容器的官方支持,Red Hat 提供了一组官方的 rhel Docker 镜像。这些镜像的一个有趣特性是,可以通过主机的 Red Hat Network Subscription 安装软件包,而无需在容器内执行任何配置。
去引用https://access.redhat.com/articles/881893#createimage:
“对于当前的 Red Hat Docker 版本,您从 Red Hat 提取的默认 RHEL 7 Docker 映像将能够利用主机系统提供的 RHEL 7 授权。因此,只要您的 Docker 主机已正确订阅并且启用了您需要在容器中获取所需软件的存储库(并且可以通过 Docker 主机访问 Internet),您就应该能够从 RHEL 7 软件存储库安装软件包。”
我担心的是,实现这一目标的机制相当不透明。例如,当使用 rhel7.1 映像启动新容器时,yum install foo
甚至无需配置 http 代理环境变量就可以运行。如果不了解此机制,系统管理员可能会受到主机系统、Docker 守护程序和正在运行的容器之间未知交互的影响。这也表明主机和容器之间的正常隔离在某种程度上受到了损害(尽管是良性的)。
重点是:这种订阅支持是如何实现的,它是否依赖于 Red Hat 通过订阅网络提供的 Docker 守护进程的定制构建?
答案1
Red Hat 附带一个docker
称为“秘密”补丁的补丁,该补丁在容器运行时将授权信息安装到容器中。
您可以在以下位置查看有关该补丁的更好描述以及上游 PR 的链接:projectatomic/docker回购:
https://github.com/projectatomic/docker/tree/docker-1.13.1-rhel#add-rhel-super-secrets-patchpatch
注意,您需要选择其中一个分支(链接转到“docker-1.3.1-rhel”分支)来查看所有携带的补丁信息。
答案2
了解了 Red Hat Satellite 管理的虚拟机的许可方式,并根据 @Leynos 的评论,我预计会有类似于 的东西virt-who
,它是一种与虚拟化主机(vSphere、KVM 等)对话并查询它以查找虚拟机详细信息的服务。然后它在 Satellite 中执行必要的 API 调用,以允许虚拟机使用主机的数据中心许可证。
我希望 Red Hat docker 守护进程提供类似的东西,让容器知道它正在从订阅的 Docker 主机运行,从而利用该订阅。
更多来自这里:
重要提示:如本主题所述,使用 docker 命令运行容器并不特别要求您注册 RHEL Atomic Host 系统并附加订阅。但是,如果您想在容器内运行 yum install 命令,则容器必须从 RHEL Atomic Host 获取有效的订阅信息,否则将失败。
因此,容器或守护进程中有一些东西可以查询主机以查找订阅信息(可能还有 repo 信息)。