6.23. 容器
RHEL 的镜像模式支持 FIPS 模式
有了此增强,您可以在构建 bootc 镜像时启用 FIPS 模式,来将系统配置为只使用 FIPS 批准的模块。您可以使用 bootc-image-builder,它需要在 Containerfile 配置中启用 FIPS 加密策略,或使用 RHEL Anaconda 安装,另外在 Containerfile 中启用 FIPS 模式,还需要在引导系统安装时添加 fips=1 内核参数。如需了解更多详细信息,请参阅 安装启用了 FIPS 模式的系统。
以下是一个带有启用 fips=1 内核参数指令的 Containerfile 。
01-fips.toml 的内容是:
kargs = ["fips=1"]
kargs = ["fips=1"]
Jira:RHELDOCS-18585[1]
支持使用 bootc-image-builder 创建和部署 VMDK
在这个版本中,您可以使用 bootc-image-builder 工具从 bootc 镜像创建虚拟机磁盘(VMDK),并将 VMDK 镜像部署到 VMware vSphere。
Jira:RHELDOCS-18398[1]
Podman 和 Buildah 支持将 OCI 工件添加到镜像索引中
有了此更新,您可以创建工件清单,并将其添加到镜像索引中。
buildah manifest add 命令支持以下选项:
-
创建工件清单的
--artifact选项 -
--artifact-type,--artifact-config-type,--artifact-layer, 和--type,--artifact-exclude-titlessubject选项来配置它所创建的工件清单的内容。
buildah manifest annotate 命令支持以下选项:
-
--index选项对索引本身设置注解,而不是镜像索引中的一个条目 -
用来设置镜像索引的 subject 字段的
--subject选项。
buildah manifest create 命令支持 the- annotation 选项,将注解添加到新镜像索引中。
提供了用于禁用 Podman 健康检查事件的选项
此增强在 [engine] 部分下的 containers.conf 配置文件中添加了一个新的 healthcheck_events 选项,以禁用 health_status 事件的生成。设置 healthcheck_events=false ,来禁用日志记录健康检查事件。
Podman 中的运行时资源更改是持久的
使用 podman update 命令更新容器配置是持久的。请注意,这个增强用于 SQLite 和 BoltDB 数据库后端。
完全支持构建多架构镜像
完全支持用于创建多架构容器镜像的 podman farm build 命令。
农场是在其中运行了 UNIX Podman 套接字的一组计算机。场中的节点可以有不同架构的机器。podman farm build 命令比 podman build --arch --platform 命令快。
您可以使用 podman farm build 来执行以下操作:
- 在农场的所有节点上构建一个镜像。
- 将场中所有节点上的镜像捆绑到清单列表中。
-
在所有农场节点上运行
podman build命令。 -
将镜像推送到
--tag选项指定的注册中心。 - 本地创建一个清单列表。
- 将清单列表推送到注册中心。
清单列表包含场中存在的每个原生架构类型的一个镜像。
Podman 中用于 pod 的 Quadlets 可用
从 Podman v5.0 开始,您可以使用 Quadlet 从 pod 描述中自动生成 systemd 服务文件。
Podman v2.0 RESTful API 已更新
新字段已添加到 libpod/images/json 端点中:
-
isManifest布尔值字段确定目标是否为清单。libpod端点返回镜像和清单列表。 -
镜像列表的
os和arch字段。
Kubernetes YAML 支持数据卷容器作为 init 容器
使用 "io.podman.annotations.kube.image.automount/$ctrname" 注解可在 Kubernetes YAML 中指定自动挂载的镜像列表。使用 podman run --mount type=image,source=<image>,dst=<path>,subpath=<path > 的基于镜像的挂载支持一个新的选项 subpath,来仅将镜像的一部分挂载到容器中。
containers.conf 文件是只读
存储在 containers.conf 文件中的系统连接和场信息是只读的。系统连接和农场信息将存储在 podman.connections.json 文件中,仅由 Podman 管理。Podman 继续支持旧的配置选项,如 [engine.service_destinations] 和 [farms] 部分。但是,如果需要,您仍然可以手动添加连接或场,但无法使用 podman system connection rm 命令从 containers.conf 文件中删除连接。
如果需要,您仍然可以手工编辑 containers.conf 文件。Podman v4.0 添加的系统连接在升级到 Podman v5.0 后保持不变。
对 Podman v5.0 的默认设置更改
在 RHEL 10.0 中,对 Podman v5.0 的以下默认设置更改:
- 默认使用 cgroup v2 而不是 cgroup v1
-
pasta是无根容器使用的默认网络,而不是slirp4netns
新的 rhel10/rteval 容器镜像
Red Hat Container Registry 中提供了实时 registry.redhat.io/rhel10/rteval 容器镜像,以便在独立 RHEL 安装上运行延迟分析。使用 rhel10/rteval 容器镜像,您可以在容器化设置中执行延迟测试,以确定此类解决方案是否可以用于实时工作负载,或者将结果与运行 rteval 的裸机运行进行比较。要使用此功能,请订阅带有实时支持的 RHEL。不提供调优指南。
Jira:RHELDOCS-18522[1]
为 Podman 和 Buildah 提供了 --compat-volumes 选项
您可以将新的 -compat-volumes 选项与 buildah build、podman build 和 podman farm build 命令一起使用。此选项触发了对使用 VOLUME 指令标记的目录内容的特殊处理,以便其内容随后只能被 ADD 和 COPY 指令修改。在这些位置通过 RUN 指令所做的任何更改将被丢弃。在以前的版本中,这个行为是默认设置,但默认禁用它。
macvlan 和 ipvlan 网络接口名称可在 containers.conf 中进行配置
要指定 macvlan 和 ipvlan 网络,您可以使用 containers.conf 配置文件中的新的 interface_name 字段来调整容器中创建的网络接口的名称。
Jira:RHELDOCS-18769[1]
支持使用 bootc-image-builder 构建 GCP 镜像
通过使用 bootc-image-builder 工具,您可以生成 .gce 磁盘镜像,并在 Google Compute Engine (GCE)平台上置备实例。
Jira:RHELDOCS-18472[1]
Podman 支持推送和拉取使用 zstd:chunked 压缩的镜像
您可以推送使用 zstd:chunked 格式压缩的镜像,以减少镜像大小,并使用部分拉取。
Container Tools 软件包已更新
提供了更新的 Container Tools RPM meta-package,其中包括 Podman、Buildah、Skopeo、crun 和 runc 工具。Buildah 已更新至版本 1.39.0,Skopeo 已更新至版本 1.18.0。Podman v5.4 包含以下值得注意的 bug 修复和增强:
-
podman update命令支持与健康检查相关的各种选项:--health-cmd定义一个新的健康检查和--no-healthcheck,以禁用现有的健康检查。这些选项可以更轻松地在运行的容器中添加、修改或禁用健康检查。如需更多信息,请参阅podman-update (5)手册页。 -
podman run、podman create和podman volume create命令的--mount type=volume 选项支持一个新的选项subpath=,以便仅在容器中可见卷的子集。 -
podman run、podman create和podman pod create命令的--userns=keep-id选项支持一个新的选项,即--userns=keep-id:size=,以配置用户命名空间的大小。 -
podman kube play命令支持容器设备接口(CDI)设备。 -
podman run、podman create和podman pod create命令支持一个新的选项,即--hosts-file来定义用于容器中的/etc/hosts的基本文件。 -
podman run、podman create和podman pod create命令支持一个新的选项,--no-hostname可以禁用在容器中创建/etc/hostname。 -
podman network create命令支持网桥网络的新选项,即--opt mode=unmanaged,它允许 Podman 在系统中使用现有网络桥接而无需更改。 -
podman run、podman create和podman pod create的--network 选项接受桥接网络host_interface_name的新选项,用于指定容器外创建的网络接口的名称。 -
在删除不存在的清单时,
podman manifest rm命令支持一个新的选项(--ignore)才能成功继续。 -
podman system prune命令支持一个新的选项,即构建构建,以从预先终止的构建容器中移除。 - Podman 将容器主机名传递给 Netavark,它将它们用于容器的任何 DHCP 请求。
-
从 Makefile 构建 podman 时,打包程序可以设置
BUILD_ORIGIN环境变量。这提供了有关谁构建 Podman 二进制文件的信息,此信息显示在podman version和podman info命令中。包含这些信息可以通过帮助维护人员识别构建和安装的源和方法,来协助 bug 报告。 -
podman kube generate和podman kube play命令可以创建并运行 Kubernetes Job YAML。 -
podman kube generate命令包括生成的 YAML 中 pod 和容器的用户命名空间信息。podman kube play命令使用此信息在创建基于 YAML 的新 pod 时复制用户命名空间配置。 -
podman kube play命令支持类型为镜像的 Kubernetes 卷。 -
Quadlet 生成的
systemd单元的服务名称可使用所有支持的 Quadlet 文件中的ServiceName键设置。 -
Quadlets 可以使用所有 Quadlet 文件支持的新键
DefaultDependencies来禁用其对network-online.target的隐式依赖项。 -
Quadlet
.container和.pod文件支持一个新的密钥AddHost,将主机添加到容器或 pod 中。 -
Quadlet
.container和.pod文件中的PublishPort键可以接受其值中的变量。 -
Quadlet
.container文件支持两个新密钥CgroupsMode和StartWithPod,为容器配置控制组,以及容器是否通过它所属的 pod 启动。 -
Quadlet
.container文件可以通过指定要在 Network 键内共享容器的 .container 文件来使用另一个容器的网络。 -
Quadlet
.container文件可以使用.image目标的Mount=type=image密钥将由.image文件管理的镜像挂载到容器中。 -
Quadlet
.pod文件支持六个新密钥、、DNS选项DNSSearch、IP、IP6和UserNS,来为 pod 配置DNS、静态 IP 和用户命名空间设置。 -
Quadlet
.image文件可以通过多次指定ImageTag键来多次提供镜像。 -
Quadlets 可以放在
/run/containers/systemd目录中以及现有的目录中,如$HOME/containers/systemd和/etc/containers/systemd/users。 - Quadlet 可以正确处理是符号链接的单元目录的子目录。
-
podman manifest inspect命令在其输出中包含清单的注解。 -
podman create、podman run和podman pod create的--add-host 选项支持指定多个主机名、分号分隔(如podman run)。--add-hosttest1;test2:192.168.1.1 -
podman run和podman create命令支持三个新选项来配置健康检查日志记录:--health-log-destination(指定日志存储的位置)、--health-max-log-count(指定日志值得存储多少个健康检查)和--health-max-log-size(指定健康检查日志的最大大小)。
有关值得注意的变化的更多信息,请参阅 上游发行注记。
容器工具使用 sigstore 签名进行容器镜像验证
有了此更新,sigstore 签名用于容器镜像验证而不是 GPG 签名,也称为简单签名。
可以自定义 podman 健康检查日志输出
在此次更新之前,当使用健康检查配置容器时,输出只能使用 podman inspect 命令访问容器状态文件中。这使调试过程变得复杂。在这个版本中,您可以使用 podman update 命令和 --health-log-destination ,-- health-max-log-count , and-health-max-log-size 选项来配置健康检查日志输出。
如需更多信息,请参阅 podman-update 手册页。
Jira:RHEL-24623[1]
使用单个命令部署容器镜像可用
您可以使用单个命令将容器镜像部署到 RHEL 云实例中。system-reinstall-bootc 命令安装执行以下操作:
- 拉取提供的镜像,以设置 SSH 密钥或访问系统。
-
使用所有绑定挂载和配置的 SSH 密钥运行
bootc install to-existing-root命令。
Jira:RHELDOCS-19516[1]
支持从头开始创建自定义 bootc 镜像
您可以从头开始创建 bootc 镜像,并完全控制镜像的内容,定制系统环境以满足特定要求。使用 bootc-base-imgectl 命令,您可以根据现有的 bootc 基础镜像创建自定义 bootc 镜像。Bootc Image from Scratch 是从容器镜像派生的,不会自动接收来自默认基础镜像的更新。要包含这些更新,您必须将它们手动合并为容器管道的一部分。另外,您可以在任何 bootc 容器镜像上使用 bootc-base-imgectl 中的 rechunk 子命令来根据需要优化或重组镜像。
Jira:RHELDOCS-19825[1]
提供了用于 bootc-image-builder 的新镜像构建进度条
在以前的版本中,您无法通过查看日志来检查镜像构建的进度。有了此增强,您可以使用 bootc-image-builder 检查您创建的镜像构建的进度。您可以在构建镜像时使用 --progress=verbose 参数恢复回之前的行为。
Jira:RHELDOCS-20170[1]
podman pod inspect 命令提供 JSON 数组,而不考虑 pod 的数量
在以前的版本中,在检查单个 pod 时,podman pod inspect 命令会忽略 JSON 数组。在这个版本中,podman pod inspect 命令在输出中生成一个 JSON 数组,而不考虑检查的 pod 数量。
Jira:RHELDOCS-18770[1]