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-host
test1;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]