在 DockerHub 上,Rocky Linux Docker 镜像有多种类型,包括 rockylinux/rockylinux:9
、rockylinux/rockylinux:9-minimal
、rockylinux/rockylinux:9-ubi-init
和 rockylinux/rockylinux:9-ubi-micro
。那么这些镜像之间有什么区别,我们在实际生产中又该如何选择呢?
Rocky Linux Docker 镜像采用了与 Red Hat 相同的镜像命名方式,其中:
UBI
代表通用基础镜像(Universal Base Image)。Micro
代表微服务(Microservices)。init
代表初始化(initialization),实际上支持多服务(Multi-service)。minimal
代表最小化安装。- 没有后缀的镜像即为标准版本。
具体来说,这些镜像中安装的服务和组件有所不同。更详细的信息可以参阅以下资源:
- 有关
rockylinux/rockylinux:9-ubi-micro
和rockylinux/rockylinux:9-ubi-init
的更多信息,请参考 GitHub – rocky-linux/sig-cloud-instance-images。 - 有关
rockylinux/rockylinux:9
和rockylinux/rockylinux:9-minimal
的详细内容,请参考 repo-info/repos/rockylinux at master · docker-library/repo-info。
通过理解这些差异,您可以根据需要选择最合适的镜像用于生产环境。
docker.io/library/rockylinux
切换成 docker.io/rockylinux/rockylinux
这个,所以后续镜像建议直接从 docker.io/rockylinux/rockylinux
下载。rockylinux:9
rockylinux/rockylinux:9
是一个通用基础镜像,其设计主要是提供一个通用的 Rocky Linux 基础环境,适合各种容器化应用。
特点
- 通用基础环境 :包含常用的系统库和工具,不是特别精简,也不是特别重,比如:
rockylinux/rockylinux:9
镜像包括dnf
等命令,但是rockylinux/rockylinux:9-minimal
镜像中没有。 - 适用于大多数应用 :为大多数容器化应用提供一个良好的基础。
- 灵活性 :通过这个镜像,您可以根据需要安装其他软件包。
使用场景
- 通用应用环境 :适用于需要基础操作系统环境但不需要极简或完整服务环境的场景。
- 开发与测试 :适合作为开发和测试的基础镜像。
rockylinux:9-minimal
rockylinux/rockylinux:9-minimal
是一个更加精简的镜像,只包含基本的系统库和工具,比标准的 rockylinux/rockylinux:9
镜像更小。它的设计目标是提供一个最小化的基础环境,但相比于 rockylinux/rockylinux:9-ubi-micro
镜像,它依然包含了一些基础工具。
特点
- 更小的体积 :比标准基础镜像更小,但不像
rockylinux/rockylinux:9-ubi-micro
镜像那样极简。 - 包含基础工具 :包含一些基本的系统管理工具。
- 适用于轻量级应用 :适合基础需求的轻量级应用,而不需要特别完整的系统环境。
使用场景
- 精简应用环境 :适用于需要轻量化处理的应用场景,但相比
rockylinux/rockylinux:9-ubi-micro
需要更多系统库和工具。 - 单任务应用 :适合单一任务或轻量级的容器化应用。
rockylinux:9-ubi-init
rockylinux/rockylinux:9-ubi-init
镜像是一个包含系统初始化工具的基础镜像。它提供了一个更完整的操作系统环境,适合需要更丰富系统工具和初始化脚本的容器运行环境。
特点
- 完整的基础系统 :包含较多的系统库和工具,类似于一个精简版的完整操作系统。
- 支持系统服务 :可以运行
systemd
,支持系统服务的启动和管理。 - 适合传统应用 :特别适用于需要完整系统环境的传统应用容器化。
使用场景
- 复杂应用环境 :适用于需要完整系统环境的应用部署环境。
- 开发和测试 :开发和测试需要模拟更完整的系统环境。
- 服务容器 :需要运行多个系统服务的环境。
rockylinux:9-ubi-micro
rockylinux/rockylinux:9-ubi-micro
镜像是一个极简的基础镜像,只有最基础的系统库和工具。它提供了一个最小化的运行时环境,适合纯粹的应用程序容器化。
特点
- 极简环境 :只包含最基本的系统库,大大减少镜像体积。
- 高效和快速 :由于镜像体积小,启动和运行速度更快。
- 安全性 :较少的系统组件降低了攻击面,提高了安全性。
使用场景
- 微服务架构 :适合微服务的容器化,每个容器只负责一个任务。
- 轻量级应用 :适用于轻量级或单一目的的容器化应用。
- 高安全需求 :减少不必要的组件,降低潜在的安全风险。
对比总结
-
rockylinux/rockylinux:9
:- 包含内容 :常用的系统库和工具。
- 体积 :81.26 MB(linux/amd64)。
- 适用场景 :通用容器化应用,开发和测试环境。
-
rockylinux/rockylinux:9-minimal
:- 包含内容 :基本系统库和部分基础工具。
- 体积 :56.52 MB(linux/amd64)。
- 适用场景 :轻量化和单任务应用,但比
ubi-micro
需要更多功能。
-
rockylinux/rockylinux:9-ubi-init
:- 包含内容 :较完整的系统环境,支持 systemd 和各类服务。
- 体积 :94.03 MB(linux/amd64)。
- 适用场景 :复杂的应用环境,开发和测试需要完整系统环境的场景。
-
rockylinux/rockylinux:9-ubi-micro
:- 包含内容 :极简系统库和工具。
- 体积 :7.17 MB(linux/amd64)。
- 适用场景 :高效和高安全性需求的场景,微服务架构。
以 repo-info/repos/rockylinux/local/9.3.md 与 repo-info/repos/rockylinux/local/9.3-minimal.md 为例进行对比:
rockylinux/rockylinux:9-minimal
对应 dnf
只有 dnf-data
包。
rpm
package:dnf-data-4.14.0-8.el9.noarch
Licenses (fromrpm --query
): GPLv2+
rockylinux/rockylinux:9
对应 dnf
包括 dnf
、dnf-data
两个包。
rpm
package:dnf-4.14.0-8.el9.noarch
Licenses (fromrpm --query
): GPLv2+
WARNING: unable to find source (dnf download
failed or returned no results)!
rpm
package:dnf-data-4.14.0-8.el9.noarch
Licenses (fromrpm --query
): GPLv2+
WARNING: unable to find source (dnf download
failed or returned no results)!
镜像选择指南
- 如果需要一个通用的基础环境,可以选择
rockylinux/rockylinux:9
。 - 如果需要一个轻量化但不至于极简的环境,可以选择
rockylinux/rockylinux:9-minimal
。 - 如果需要一个包含系统服务的更完整环境,可以选择
rockylinux/rockylinux:9-ubi-init
。 - 如果需要一个极简和高效的环境,适用于微服务架构,可以选择
rockylinux/rockylinux:9-ubi-micro
。
根据您的具体需求,选择合适的镜像来构建和运行容器化应用,以优化容器的性能、体积和安全性。需要注意的是,镜像中包含的工具和命令越多,对应的攻击面就越大;而镜像越精简,您可用的工具和命令也就越少,这可能会影响故障排除的效率。因此,木子通常会基于 rockylinux/rockylinux:9-minimal
镜像来构建适合自己需求的镜像,例如:builder-java、runtime-java、builder-golang、runtime-golang 等。通过这种方法,您可以在保持镜像精简的同时,确保拥有足够的工具来满足特定应用需求。
参考文献
[1] (Re)Introducing the Red Hat Universal Base Image
[2] Universal Base Images (UBI): Images, repositories, packages, and source code – Red Hat Customer Portal