4.19. 容器
RHEL 的镜像模式现在支持 FIPS 模式
在这个版本中,您可以在构建 bootc 镜像时启用 FIPS 模式,以将系统配置为只使用 FIPS 批准的模块。您可以使用 bootc-image-builder
,它需要在 Containerfile 配置中启用 FIPS 加密策略,或使用 RHEL Anaconda 安装,另外在 Containerfile 中启用 FIPS 模式,还需要在引导系统安装时添加 fips=1
内核参数。如需了解更多详细信息 ,请参阅 安装启用了 FIPS 模式的系统。
以下是一个 Containerfile,带有启用 fips=1
内核参数的指令:
FROM registry.redhat.io/rhel9/rhel-bootc:latest# # Enable fips=1 kernel argument: https://containers.github.io/bootc/building/kernel-arguments.html COPY 01-fips.toml /usr/lib/bootc/kargs.d/ # Install and enable the FIPS crypto policy RUN dnf install -y crypto-policies-scripts && update-crypto-policies --no-reload --set FIPS
Jira:RHELDOCS-18585[1]
RHEL 的镜像模式现在支持逻辑绑定的应用程序镜像
在这个版本中,您可以支持生命周期绑定到基本 bootc 镜像的容器镜像。这有助于为应用程序和操作系统划分不同的操作流程,应用程序镜像则从基础镜像引用为镜像文件或等效镜像。因此,您可以为系统安装管理多个容器镜像,例如,对于断开连接的安装,系统必须镜像,而不仅仅是镜像(mirror)。
Jira:RHELDOCS-18666[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 healthchek 事件的选项
此增强在 [engine]
部分下的 containers.conf
配置文件中添加了一个新的 healthcheck_events
选项,以禁用 health_status
事件的生成。将 healthcheck_events=false
设置为禁用日志记录 healthchek 事件。
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
,来仅将镜像的一部分挂载到容器中。
Container Tools 软件包已更新
现在提供了更新的 Container Tools RPM meta-package,其包括 Podman、Buildah、Skopeo、crun
和 runc
工具。与之前的版本相比,Podman v5.0 包含以下值得注意的 bug 修复和增强:
-
podman manifest add
命令现在支持一个新的--artifact
选项,来将 OCI 工件添加到清单列表中。 -
podman create
、podman run
和podman push
命令现在支持--retry
和-retry-delay
选项,来为推送和拉取镜像配置重试。 -
podman run
和podman exec
命令现在支持--preserve-fd
选项,来将文件描述符的列表传到容器中。它是-preserve-fds
的一种替代方法,其传递特定数量的文件描述符。 - Quadlet 现在支持模板单元。
-
podman kube play
命令现在可以使用volume.podman.io/image
注解创建基于镜像的卷。 -
使用
podman kube play
命令创建的容器现在可以使用新注解io.podman.annotations.volumes-from
来包含其他容器中的卷。 -
使用
podman kube play
命令创建的 Pod 现在可以使用 pod 定义中的io.podman.annotations.userns 注解
来设置用户命名空间选项。 -
podman create
和podman run
的--gpus
选项现在与 Nvidia GPU 兼容。 -
podman create
和podman run
的--mount
选项支持一个新的挂载选项no-dereference
,来将符号链接而不是其去掉了引用的目标挂载到容器中。 -
Podman 现在支持新的
--config
全局选项,以指向可以获取注册中心登录凭据的 Docker 配置。 -
podman ps --format
命令现在支持新的.Label
格式指定符。 -
podman run --userns=auto
的uidmapping
和gidmapping
选项现在可以使用@
符号作为主机 ID 的前缀来映射到主机 ID。 - Quadlet 现在支持 systemd 样式的插入目录。
-
Quadlet 现在支持使用新的
.pod
单元文件创建 pod。 -
Quadlet 现在在
.container
文件中支持两个新键,Entrypoint
和StopTimeout
。 -
Quadlet 现在支持在
.container
文件中多次指定Ulimit
键,以便对容器设置多个ulimit
。 -
Quadlet 现在支持在
.container
文件中将Notify
键设置为healthy
,以便在健康检查开始传递时仅通知容器已启动。 -
用于容器的
podman inspect
命令的输出已更改。Entrypoint
字段从字符串改为字符串数组,StopSignal
字段从整数改为字符串。 -
当在没有健康检查的情况下检查容器时,容器的
podman inspect
命令现在对健康检查返回 nil 。 - 不再可以创建新的 BoltDB 数据库。尝试这样做会导致一个错误。所有新的 Podman 安装现在都使用 SQLite 数据库后端。现有的 BoltDB 数据库仍然可用。
- 对 CNI 网络的支持由构建标签控制,且默认不启用。
-
Podman 现在在
cgroup v1
系统上使用时打印警告。对cgroup v1
的支持已弃用,并将在以后的发行版本中删除。您可以设置PODMAN_IGNORE_CGROUPSV1_WARNING
环境变量来压制警告。 - 现在,通过 Docker 兼容的 API 发送的网络统计信息是按每个接口的,而不是聚合的,这提高了 Docker 兼容性。
-
无根网络的默认工具已从
slirp4netns
改为pasta
,以提高性能。因此,名为pasta
的网络不再被支持。 - 将多个过滤器与 List Images REST API 一起使用现在将使用 AND 而不是 OR 来组合过滤器,改进了 Docker 兼容性。
对接受数组的多个 Podman CLI 选项的解析已更改为不再接受字符串分隔的列表,而是需要多次传递的选项。这些选项是:
-
podman manifest annotate
和podman manifest add
的--annotation
选项 -
podman kube play
的----configmap
,--log-opt
和--annotation
选项
-
podman image trust set
的--pubkeysfile
选项-
podman create
、podman run
、podman push
和podman pull
的--encryption-key
和--decryption-key
选项 -
podman exec
的--env-file
选项,podman create
和podman run
的--bkio-weight-device
,--device-read-bps
,--device-write-bps
,--device-read-iops
,--device-write-iops
,--device
,--label-file
,--chrootdirs
,--log-opt
,--env-file
选项 -
--hooks-dir
和--module
全局选项
-
-
podman system reset
命令不再等待运行的容器停止,而是立即发送SIGKILL
信号。 -
podman network inspect
命令现在包含在其输出中使用网络的正在运行的容器。 -
现在,除了 AMD 和 Intel 64 位构架(x86-64-v2)以及 64 位 ARM 架构(ARMv8.0-A)外,在其它架构上也支持
podman compose
命令。 -
podman kube play
和podman kube generate
命令的-no-trunc
选项已弃用。Podman 现在遵循 Kubernetes 的注解大小的规范,这删除了对此选项的需要。 -
来自
podman system connection
命令的连接和来自podman farm
命令的场现在被写入一个名为podman-connections.conf
文件的新配置文件。因此,Podman 不再写入containers.conf
文件。Podman 仍然尊重containers.conf
中的现有连接。 -
大多数
podman farm
子命令不再需要连接到场中的机器才能运行。 -
当容器镜像没有定义入口点时,
podman create
和podman run
命令不再需要在命令行中指定入口点。在这种情况下,一个空命令被传递给 OCI 运行时,产生的行为是特定于运行时的。 -
添加了一个新的 API 端点
/libpod/images/$name/resolve
,以将潜在的短名称解析为可用来拉取镜像的完全限定镜像引用 Podman 的列表。
有关显著变化的更多信息,请参阅 上游发行注记。
为 Podman 和 Buildah 提供了 --compat-volumes
选项
您可以将新的 -compat-volumes
选项与 buildah build
、podman build
和 podman farm build
命令一起使用。此选项触发了对使用 VOLUME
指令标记的目录内容的特殊处理,以便其内容随后只能被 ADD
和 COPY
指令修改。在这些位置通过 RUN
指令所做的任何更改将被丢弃。在以前的版本中,此行为是默认的,但现在默认被禁用。
一个新的 rhel10-beta/rteval
容器镜像
现在,Red Hat Container Registry 中提供实时 registry.redhat.io/rhel10-beta/rteval
容器镜像,以便对独立的 RHEL 安装运行延迟分析。使用 rhel10-beta/rteval
容器镜像,您可以在容器化设置中执行延迟测试,以确定此类解决方案是否适用于您的实时工作负载,或者将结果与 rteval
的裸机运行进行比较。要使用此功能,请订阅带有实时支持的 RHEL。不提供调优指南。
Jira:RHELDOCS-18522[1]
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 后保持不变。
macvlan
和 ipvlan
网络接口名称可在 containers.conf
中进行配置
要指定 macvlan
和 ipvlan
网络,您可以使用 containers.conf
配置文件中的新的 interface_name
字段来调整容器中创建的网络接口的名称。
Jira:RHELDOCS-18769[1]
bootc-image-builder
现在支持定义自定义 Kickstart 文件并将其注入 ISO 构建
有了这个增强,您可以通过设置用户、自定义分区、注入密钥,并将 kickstart 文件注入 ISO 构建来配置安装过程来定义 Kickstart。生成的磁盘镜像会创建一个自包含安装程序,可在其他设备之间自动化和部署设备、断开连接的系统、边缘设备。因此,使用 bootc-image-builder
创建自定义介质更为简单。
Jira:RHELDOCS-18734[1]
支持使用 bootc-image-builder
构建 GCP 镜像
通过使用 bootc-image-builder
工具,您现在可以生成 .gce
磁盘镜像,并在 Google Compute Engine (GCE)平台上置备实例。
Jira:RHELDOCS-18472[1]
支持使用 bootc-image-builder创建和部署 VMDK
在这个版本中,您可以使用 bootc-image-builder
工具从 bootc 镜像创建虚拟机磁盘(VMDK),并将 VMDK 镜像部署到 VMware vSphere。
Jira:RHELDOCS-18398[1]
podman pod inspect
命令现在提供一个 JSON 数组,而不考虑 pod 的数量
在以前的版本中,在检查单个 pod 时,podman pod inspect
命令会忽略 JSON 数组。有了此更新,podman pod inspect
命令现在在输出中生成一个 JSON 数组,而不考虑检查的 pod 的数量。
Jira:RHELDOCS-18770[1]
composefs 文件系统现在可用
composefs 只读文件系统现在被完全支持。这通常旨在被当前的 bootc/ostree 和 podman 项目使用。使用 composefs 时,您可以使用这些项目创建和使用只读镜像,在镜像间共享文件数据,并在运行时验证镜像。因此,您挂载了一个经过完全验证的文件系统树,具有对相同文件的机会细粒度共享。
Jira:RHEL-18157[1]