4.21. 容器
RHEL 的镜像模式现在支持 FIPS 模式
有了此增强,您可以在构建 bootc 镜像时启用 FIPS 模式,来将系统配置为只使用 FIPS 批准的模块。您可以使用 bootc-image-builder,它需要在 Containerfile 配置中启用 FIPS 加密策略,或使用 RHEL Anaconda 安装,另外在 Containerfile 中启用 FIPS 模式,还需要在引导系统安装时添加 fips=1 内核参数。如需了解更多详细信息,请参阅 安装启用了 FIPS 模式的系统。
以下是一个 Containerfile,带有启用 fips=1 内核参数的指令:
Jira:RHELDOCS-18585[1]
RHEL 的镜像模式现在支持逻辑绑定的应用程序镜像
有了此增强,您可以支持生命周期绑定到基本 bootc 镜像的容器镜像。这有助于统一应用程序和操作系统的不同的操作过程,应用程序镜像可以作为镜像文件或等效文件从基础镜像引用。因此,您可以管理用于系统安装的多个容器镜像,例如,对于断开连接的安装,系统必须是镜像的,而不能仅是一台机器。
Jira:RHELDOCS-18666[1]
Podman 和 Buildah 支持将 OCI 工件添加到镜像索引中
有了此更新,您可以创建工件清单,并将其添加到镜像索引中。
buildah manifest add 命令现在支持以下选项:
-
创建工件清单的
--artifact选项 -
--artifact-type,--artifact-config-type,--artifact-layer-type,--artifact-exclude-titles和--subject选项来调整其创建的工件清单的内容。
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,来仅将镜像的一部分挂载到容器中。
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,并将 Kickstart 文件注入到 ISO 构建来配置安装过程。生成的磁盘镜像会创建一个自包含安装程序,其可在其他系统之间自动化和部署设备、断开系统、边缘设备。因此,使用 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]