6.23. 容器
RHEL 的镜像模式现在支持 FIPS 模式
有了此增强,您可以在构建 bootc 镜像时启用 FIPS 模式,来将系统配置为只使用 FIPS 批准的模块。您可以使用 bootc-image-builder
,它需要在 Containerfile 配置中启用 FIPS 加密策略,或使用 RHEL Anaconda 安装,另外在 Containerfile 中启用 FIPS 模式,还需要在引导系统安装时添加 fips=1
内核参数。如需了解更多详细信息,请参阅 安装启用了 FIPS 模式的系统。
以下是一个带有启用 fips=1
内核参数指令的 Containerfile 。
FROM registry.redhat.io/rhel9/rhel-bootc:latest# # Enable fips=1 kernel argument: https://bootc-dev.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
FROM registry.redhat.io/rhel9/rhel-bootc:latest#
# Enable fips=1 kernel argument:
https://bootc-dev.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
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-titles
和--subject
选项来微调它创建的工件清单的内容。
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
,来仅将镜像的一部分挂载到容器中。
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
容器镜像
现在,红帽容器注册中心提供了实时 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
命令现在支持一个新选项--build
,来删除过早终止的构建中剩余的构建容器。 - 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
文件现在可以通过指定要在网络键内共享的容器的.container
文件来使用另一个容器的网络。 -
Quadlet
.container
文件现在可以使用Mount=type=image
键和.image
目标,将.image
文件管理的镜像挂载到容器中。 -
Quadlet
.pod
文件现在支持六个新键,DNS
、DNSOption
、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
和 --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]