跳转到主内容

23 篇带“podman”标签的文章

查看所有标签

简化 RHEL 10 上的容器和 AI 开发

·阅读时间 6 分钟
Shipra Singh
技术文档工程师

在不断发展的容器化和 AI 世界中,开发者需要能够无缝集成到日常工作流程中的工具。Podman 及其图形工具 Podman Desktop 已成为在不同平台(包括 Red Hat Enterprise Linux (RHEL) 10)上构建应用程序的有前景的工具。

Podman:基础

Podman 提供了一种与容器和 Kubernetes 交互的有效方式。它快速、轻量,并采用无守护进程架构运行。Podman 支持无根容器,允许您限制权限而不会影响功能。开发者可以拉取、构建和推送镜像,运行和调试容器,并高效地使用 Kubernetes。Podman 与 systemd 无缝集成,提供基本的容器编排功能,例如 pod 管理和 Quadlet systemd 生成。

Podman Desktop:RHEL 开发者不可或缺的组件

Podman Desktop 通过提供用户友好的界面显著增强了 Podman 体验,简化了容器和 Kubernetes 管理。它为构建、运行和管理容器和 pod 提供了精简的体验。它还提供了强大的 Kubernetes 集成,使您能够使用 Kind 和 Minikube 等工具创建本地集群。Podman Desktop 通过解决复杂性、技能差距以及本地和生产部署之间不一致等挑战,简化了本地开发环境。它提供了简单的入门过程,指导开发者从单个应用程序转向容器、pod,最后转向 Kubernetes。

Podman Desktop 提供Docker 兼容性功能,支持 Dockerfiles 和 Compose,从而最大限度地减少了配置更改的需求。它允许从 Docker 轻松迁移到 Podman,甚至允许您运行 Podman 解释的 `docker` 命令。Podman 包含在 RHEL 订阅中。当您从 RHEL 扩展存储库安装 Podman Desktop 时,Podman Desktop 会检测 Podman 并运行它,以提供这两个工具之间的简化集成。对于在 RHEL 上构建应用程序的开发者来说,这种集成在以下方面具有优势:

  • 标准化的容器环境:使用一套一致的工具和实践,简化生产环境中容器的管理和部署。
  • 跨平台一致性:在 Windows、macOS 和 RHEL 上享受熟悉的体验。
  • 支持多种 RHEL 扩展:Podman Desktop 中提供了多种扩展,通过关键功能增强 RHEL 开发者的工作流程。
    • 可启动容器 (Bootable Container):创建用于裸机、AWS 和其他环境的可启动容器镜像。有关更多详细信息,请参阅此学习路径
    • RHEL 虚拟机:在 macOS 或 Windows 环境中轻松运行和管理 RHEL 虚拟机。
    • RHEL Lightspeed:一个 AI 助手,可简化 Linux 管理。它支持使用自然语言与 RHEL 交互,并提供故障排除和调优建议。
    • Red Hat 认证:简化 Red Hat 认证、访问 Red Hat 容器注册表以及注册 Linux 虚拟机,通常通过免费的 Red Hat 开发者订阅实现。

Podman AI Lab:简化 RHEL 上的 AI 开发者工作流程

Podman AI Lab 扩展对于在 RHEL 生态系统内工作的 AI 开发者很有帮助。它使您能够在本地运行大型语言模型 (LLM),从而简化了直接在您的机器上开发和调试 AI 驱动应用程序的过程。这种方法具有多项优势,包括数据隐私、成本控制以及在本地环境中测试和调试应用程序的能力。该扩展通过提供以下功能简化了 AI 应用程序开发工作流程:

  • 一个精选的开源模型目录,可供下载。
  • 一个用于实验模型和自定义提示的 Playground 环境。
  • 一个包含示例 AI 用例的配方目录。
  • 从您的本地环境与 LlamaStack 集成,运行容器化分发,并访问 LlamaStack API。
  • 适用于各种语言和框架的代码片段,简化了将 AI 融入您的应用程序的过程。
  • 一个推理服务器,用于通过与 OpenAI 兼容的 API 在本地提供模型服务。

这使开发人员能够轻松开始使用生成式 AI,并将模型集成到他们的应用程序中。

在 RHEL 10 上的可用性和安装

通过 RHEL 扩展存储库通道中的 Podman Desktop,您可以轻松下载和使用它。此存储库是现代开发者工具、开源库和专用实用程序的精选集合,可确保可靠、最新且经过 Red Hat 签名的软件。要进行安装,您需要一台已使用您的帐户详细信息激活密钥注册到订阅管理器的 RHEL 10 机器。

安装和验证过程包括:

  1. 打开一个终端,并启用 RHEL 扩展仓库

    $ sudo subscription-manager repos --enable rhel-10-for-$(arch)-extensions-rpms
  2. 在提示时输入您的密码。

  3. 安装 Podman Desktop

    $ sudo dnf install podman-desktop
  4. 输入 `y` 确认安装大小。

  5. 输入 y 以导入 GPG 密钥并完成安装。

  6. 在主屏幕顶部的搜索框中输入 Podman Desktop,然后单击该应用程序以打开它。

  7. 按照提示完成应用程序的快速入门过程。 RHEL 10 上 Podman Desktop 的截图

  8. 运行基本任务,例如

关于支持的重要说明

Podman Desktop 是一个开源社区项目。虽然 Podman 本身在 RHEL 上有支持选项,但 Podman Desktop 对 Red Hat 客户的支持模式属于“合作社区支持”。这意味着它旨在用于非生产支持,并且只提供社区贡献的好处,但没有或有限的服务级别协议 (SLA)。符合条件的客户可以使用此级别的支持来提出非生产查询并为更复杂的问题提交工单。

参与进来:您的反馈至关重要!

Podman Desktop 是一个不断发展的项目,您的反馈对于其持续开发和改进至关重要。我们鼓励您:

  • 提供反馈:分享您的经验和建议,以塑造项目的未来。使用任务栏中的“分享您的反馈”图标来快速提供反馈。
  • 创建问题:如果您遇到错误或有功能请求,请在 GitHub 仓库上创建一个问题。
  • 加入社区:与其他开发者和维护者互动,提问并分享您的知识。您可以在 GitHub 上找到我们,并为社区讨论做出贡献。

有关更多信息,请访问 PodmanPodman Desktop。深入探索,帮助我们继续为 RHEL 10 上的容器和 AI 开发构建强大且用户友好的体验!

使用 Podman Desktop 进行容器和 Kubernetes 开发

·阅读时间 6 分钟
Matt Demyttenaere
产品经理

在现代软件开发领域,容器和 Kubernetes 不再是可选的;它们是必不可少的。这就是 Podman Desktop 的用武之地,它是您轻松自信地构建、管理和部署容器和 Kubernetes 集群的终极工具。在这篇博客文章中,我们将介绍一个典型的开发工作流程,创建和构建一个容器,然后在本地 Kubernetes 集群中对其进行测试。让我们深入了解。

使用 Podman Desktop 构建容器化应用程序

首先,让我们从使用 Podman Desktop 在容器中构建一个应用程序开始。我们需要我们的应用程序代码和一个 Containerfile。对于一个简单的应用程序,你的 Containerfile 可能看起来像这样:

FROM docker.io/nginxinc/nginx-unprivileged

COPY <<EOF /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Simple NGINX Container</title>
</head>
<body>
<h1>Hello from my Podman NGINX Container!</h1>
<p>This content is being served by NGINX running in a Podman container.</p>
</body>
</html>
EOF

为了增强安全性,我们使用 `nginx-unprivileged` 镜像。这有助于避免根访问,某些 Kubernetes 发行版(如 OpenShift)默认强制执行此限制。默认的 NGINX 镜像使用端口 80,这在无根模式下是被禁止的。

一旦您的应用程序和 Containerfile 准备就绪,Podman Desktop 会让构建过程变得简单: 构建镜像

  1. 导航到“镜像”部分
  2. 选择您的 Containerfile
  3. 为您的镜像提供一个名称(例如 webserver)
  4. 点击“构建”

构建镜像后,您可以立即单击运行它,您的容器将出现在“容器”列表中。

Start container

  1. 在“镜像”列表中找到您的容器
  2. 点击“运行镜像 ▶️”按钮
  3. 给您的容器起个名字,我们称之为:“webserver”

容器管理和日志分析

现在我们的 Web 服务器容器正在运行,我们可以在 UI 中对其进行检查 查看容器详细信息

我们可以点击“打开浏览器”按钮在浏览器中查看 Web 服务器: Web 服务器在浏览器中打开

监控容器日志对于调试和理解应用程序行为至关重要。让我们使用 Podman Desktop 查看新创建容器的日志。

  1. 从“容器”列表中选择您正在运行的容器
  2. 点击“日志”选项卡查看容器的日志
  3. 在最新版本的 Podman Desktop 中,您还可以在日志中进行搜索!

View container logs

有了这些,我们就可以继续开发过程。当代码更新后,我们能够重新构建容器。除此之外,我们可以与团队共享 Containerfile,他们将能够重现与我们完全相同的环境来构建和测试他们的代码。

使用 Kubernetes 和 OpenShift

既然我们已经建立了开发环境并运行起来了,是时候为生产环境做准备了。在当今世界,转向 Kubernetes 是很自然的。拥有一个本地运行的集群,我们能够快速迭代,同时仍然拥有一个尽可能接近生产的环境。这有助于将来更顺利地迁移。Podman Desktop 将帮助您测试并执行该迁移。

通过KindMinikube,我们可以在几分钟内拥有一个本地运行的Kubernetes集群。这将使我们能够在Kubernetes环境中测试我们的应用程序。Kind与Podman Desktop一起安装,因此您可以立即开始使用。

  1. 首先导航到“Kubernetes”页面
  2. 点击“创建新的 Kind 集群”按钮

Create kind cluster

  1. 点击“创建”
  2. 等待 kind 集群创建完成
  3. 集群创建后,Podman Desktop 会自动将您的 Kubernetes 上下文切换到新的 kind 集群。如果您想更改集群,可以在状态栏中切换上下文。

我们现在有一个本地运行的 Kubernetes 集群,我们可以在 Kubernetes 仪表板上进行探索。

Kubernetes dashboard

这个仪表板不仅为您提供了集群的概览,还提供了对集群中存在的不同 Kubernetes 对象的快速访问。

在本地 Kubernetes 集群上创建 Pod

有了一个正在运行的 Kubernetes 集群,我们现在可以在 Kubernetes 集群中创建我们的 Pod。使用 Podman Desktop,我们可以将之前创建的容器转换为我们 kind 集群中的一个 Pod。

首先,我们必须将我们的镜像推送到我们的 kind 集群。 推送镜像到 kind

现在镜像已可用,我们可以使用 Podman Desktop UI 将容器部署到 Pod 部署到 Kubernetes

  1. 导航到“容器”部分
  2. 在 webserver 容器上,点击“部署到 Kubernetes”按钮
  3. 选择您的 kind 集群

从容器到 Kubernetes 清单的转换特别有价值,它消除了手动为简单部署编写 YAML 文件的需要。Podman Desktop 会向生成的 Kubernetes YAML 添加 `imagePullPolicy: IfNotPresent`。这确保我们使用的是刚刚推送到集群的镜像。请务必将此添加到您的 Kubernetes YAML 中,或者在您的镜像上使用特定的标签,以避免默认拉取策略 (`Always`)。

监控 Kubernetes 事件和资源

了解 Kubernetes 集群中发生的事情对于有效开发至关重要。在最新版本的 Podman Desktop 中,您现在可以在 UI 中检查 Kubernetes Pod 的事件。

让我们检查一下我们的 Pod 是否已成功创建并正在运行。

  1. 导航到左侧导航栏中的“Kubernetes”
  2. 点击“Pods”子导航
  3. 点击您刚刚创建的 Pods
  4. 滚动到底部并检查“事件”
  5. 我们可以看到我们的 Pod 已经启动并正在运行

View pod events

我们还可以查看“日志”选项卡以查看正在运行的 Pod 的日志。 查看 pod 日志

视频演示

结论

Podman Desktop 通过提供以下功能,显著简化了容器和 Kubernetes 的开发体验:

  • 一个用于构建和管理容器的统一界面
  • 与 Kubernetes 和 OpenShift 的无缝集成
  • 强大的日志记录和调试工具
  • 连接本地开发和生产 Kubernetes 环境的桥梁

无论您是刚刚开始接触容器还是管理复杂的 Kubernetes 部署,Podman Desktop 都提供简化工作流程并提高生产力的工具。作为一个CNCF 项目,它不断根据云原生社区的需求发展,使其成为任何开发者工具包中越来越有价值的工具。

立即试用 Podman Desktop,体验它如何改变您的容器、Kubernetes 和 OpenShift 工作流!

在 Podman AI Lab 中启用 OpenVINO 推理

·4 分钟阅读
Jeff Maury
工程经理

Podman AI Lab 简介

Podman AI Lab 是一个开源平台,旨在简化使用容器技术部署、管理和实验 AI 工作负载。它提供了一个用户友好的界面,用于在本地或云端运行、测试和扩展 AI 模型,利用 Podman 容器的强大功能和灵活性。

什么是 OpenVINO?

OpenVINO™(开放视觉推理和神经网络优化)是 Intel 开发的开源工具包,用于加速各种硬件(包括 CPU、GPU 和专用加速器)上的 AI 推理。它优化深度学习模型以实现快速、高效的推理,使其成为边缘和云 AI 应用程序的热门选择。

在 Podman AI Lab 中使用 OpenVINO

Podman AI Lab 现在支持 OpenVINO 作为推理提供程序。这意味着您可以:

  • 在启动推理服务器或 playground 时选择一个与 OpenVINO 兼容的模型。
  • 在支持的英特尔设备上享受硬件加速推理带来的好处。
  • 轻松地在不同的推理提供程序(例如,llama-cpp、OpenVINO)之间切换,以进行基准测试和兼容性测试。
警告

此功能仅在基于英特尔的系统上可用,因为 OpenVINO 是为英特尔硬件优化的。如果您使用的是非英特尔系统,您将无法使用 OpenVINO 作为推理提供程序。

如何使用

  1. 启动 Podman AI Lab 并导航到模型部署或 playground 部分。
  2. 在配置您的模型时,选择一个与 OpenVINO 兼容的模型。
  3. 启动推理服务器或 playground。

启动 OpenVINO 推理服务器

  1. 点击导航栏中的 Podman AI Lab 图标。
  2. 在 Podman AI Lab 导航栏中,点击 模型 > 服务 菜单项。
  3. 点击右上角的 新建模型服务 按钮。
  4. 模型 列表中选择一个与 OpenVINO 兼容的模型(例如 OpenVINO/mistral-7B-instruct-v0.2-int4-ov),然后点击 创建服务 按钮。
  5. 该模型的推理服务器正在启动,稍等片刻后,点击 打开服务详情 按钮。

OpenVINO inference server details

使用终端 shell,执行给定的 curl 命令并查看推理结果输出。

启动兼容 OpenVINO 模型的游乐场

  1. 点击导航栏中的 Podman AI Lab 图标。
  2. 在 Podman AI Lab 导航栏中,点击 模型 > Playgrounds 菜单项。
  3. 点击右上角的 新建 Playground 按钮。
  4. 模型 列表中选择一个与 OpenVINO 兼容的模型(例如 OpenVINO/mistral-7B-instruct-v0.2-int4-ov),然后点击 创建 Playground 按钮。
  5. 该模型的 playground 正在启动,稍等片刻后,将显示一个聊天界面。

Initial playground on OpenVINO model

在提示符中输入“What is OpenVINO ?”,然后点击 发送 按钮。OpenVINO 模型将回复一个答案。

OpenVINO model response in the playground

与 OpenShift AI + OpenVINO 的一致性

在 Podman AI Lab 中使用 OpenVINO 的一个关键优势是,当将工作负载过渡到 OpenShift AI 时,它带来了一致性。这两个平台现在都支持 OpenVINO,确保:

  • 在 Podman AI Lab 中本地测试和优化的模型,在部署到 OpenShift AI 时将表现出相同的行为。
  • 您可以维持从开发到生产的统一工作流,减少意外情况和集成问题。
  • 性能优化和硬件加速在不同环境中得以保留。

结论

通过启用 OpenVINO 作为推理提供者,Podman AI Lab 赋能用户在本地和云端利用高性能 AI 推理,并在 OpenShift AI 等平台之间获得一致的体验。这种集成简化了 AI 开发生命周期,并为部署高效、可扩展的 AI 解决方案开辟了新的可能性。

MINC:加速本地 K8s 开发

·阅读时间 6 分钟
Florent Benoit
首席软件工程师

在本地工作的开发人员通常寻求一种快速的内循环来编码、构建和测试他们的 OCI 镜像和 Kubernetes 应用程序。

例如,当在 Kubernetes pod 中测试新镜像时,该镜像必须可以通过推送到私有或公共注册表来访问,或者确保它在 Kubernetes 集群节点上可用。这通常需要额外的命令,例如 `kind load docker-image`、`minikube cache add `,或将镜像发布到第三方注册表。

在这篇博文中,我们将介绍一个名为 `MINC (MicroShift IN Container)` 的新扩展,它提供了一个运行在现有 Podman Machine 环境中的 MicroShift 集群。

hero

使用 Podman 和 Podman Desktop 增强您在 VS Code 中的容器开发

·5 分钟阅读
Matt Demyttenaere
产品经理

开发容器化应用程序有时会感觉很复杂,但有了合适的工具,它就可以成为一个流畅高效的过程。在这篇博客文章中,我们将探讨如何利用 Visual Studio Code (VS Code) 与 Podman 和 Podman Desktop 的强大功能来简化您的容器开发工作流程。我们将介绍如何设置和使用两个与 Podman 集成的 VS Code 扩展。

VS Code:您的容器开发 IDE

VS Code 是一款流行且功能多样的代码编辑器,可以通过扩展来增强其功能。对于容器开发,有几个优秀的扩展可以与 Podman 无缝集成。

先决条件

在我们开始之前,请确保您已安装以下软件:

  • Podman:请遵循官方网站上的安装说明。
  • Podman Desktop:官方网站下载并安装 Podman Desktop。
  • Visual Studio Code:官方网站下载并安装 VS Code。

VS Code 扩展

为了将 VS Code 与 Podman 集成,我们有两种扩展可供选择:

  1. Microsoft 的容器工具扩展“容器工具”扩展为容器相关任务提供了出色的支持,包括构建镜像、管理容器以及处理 Containerfiles 和 Dockerfiles。Microsoft 最近宣布,他们将把 Docker 扩展发展为容器工具扩展,以支持 Podman 等其他工具!
  2. Pod Manager:此扩展由我们社区的一名成员创建,并且完全开源。它旨在帮助您直接从 VS Code 界面管理 Podman 容器、镜像、卷和网络。

虽然您不太可能同时使用这两个扩展,但比较它们将帮助您了解每个扩展的优缺点,最终使其更容易选择最适合您需求的扩展。因此,对于这篇博客文章,我们将逐一安装它们。

选项 1:Microsoft 的容器工具扩展

要安装此扩展:

  1. 打开 VS Code。
  2. 点击活动栏中的扩展图标(或按 Ctrl+Shift+XCmd+Shift+X)。
  3. 搜索“Container Tools”并安装微软发布的扩展。

为 Podman 配置 VS Code

如果 Docker 未运行,Container Tools 扩展通常会通过查看 `DOCKER_HOST` 环境变量自动检测 Podman。在 Podman Desktop 中,导航到“设置”>“Docker 兼容性”>“第三方工具兼容性”,并确保该选项已启用。有关我们文档中的 Docker 兼容性的更多信息。

enabling docker compatibility in the settings

选项 2:Pod Manager

要安装此扩展:

  1. 打开 VS Code。
  2. 点击活动栏中的扩展图标(或按 Ctrl+Shift+XCmd+Shift+X)。
  3. 搜索“Pod Manager”并安装由 dreamcatcher45 发布的扩展。

使用 VS Code 扩展

既然我们已经安装并配置了扩展,让我们看看如何使用它们。

使用 Containerfiles 和 Dockerfiles

这两个扩展都为 Containerfile 和 Dockerfile 提供语法高亮、代码补全和语法检查功能。在 VS Code 中打开一个 Containerfile,您将立即从这些功能中受益。

您也可以直接从 VS Code 构建镜像:

  1. 在资源管理器视图中右键单击 Containerfile。
  2. 选择“构建镜像”。
  3. VS Code 将提示您输入镜像名称和标签。
  4. 然后,扩展将使用 Podman 构建镜像。
  5. 之后,您将在侧边栏中看到构建好的镜像。

如果您使用命令行来构建镜像,您也会在这里看到它们。

building a Containerfile in vs code using the microsoft extension

管理容器

这些扩展还允许您直接从 VS Code 管理容器。您可以启动、停止、重启和移除容器,以及查看它们的日志和检查它们的配置。

要查看容器日志:

  1. 点击活动栏中的容器图标。
  2. 您将看到您的容器、镜像和网络列表。
  3. 右键单击一个容器以执行操作。

using Container Tools extension to view the logs of the container

同样,使用 Pod Manager 扩展,我们可以直观地检查容器、镜像和卷。

  1. 点击活动栏中的 Pod Manager 图标。
  2. 您将看到您的容器、镜像和网络列表。

using podmanager to view all the running containers, images and volumes

并管理容器的生命周期。

using podmanager to manage the lifecycle of the container

当然,还可以通过可视化界面来解决问题。

using podmanager to enter the container

结论

相比之下,这两个扩展提供了几乎相同的功能集,因此选择哪个 UI 完全取决于您的个人偏好。我个人会坚持使用 Pod Manager,因为它的标志是一个海豹 🦭。请记住,如果您在使用这些工具或 Podman Desktop 时遇到任何问题,请通过发起讨论创建问题告诉我们。

通过结合 VS Code、Podman 和 Podman Desktop 的强大功能,您可以创建一个流线型且高效的容器开发工作流程。VS Code 扩展提供了与 Podman 的出色集成,允许您直接从代码编辑器管理容器、构建镜像和使用 Containerfiles。我们很高兴看到 Microsoft 正在接纳 Podman 并在其生态系统中构建支持。Podman Desktop 通过可视化界面来管理您的容器环境来补充这一点,并将帮助您从开发环境迁移到生产 Kubernetes 环境。拥抱这些工具,提升您的容器开发体验!

Podman Desktop 1.18 发布

·28 分钟阅读
Sonia Sandler
助理软件工程师

Podman Desktop 1.18 版本发布!🎉

podman-desktop-hero-1.18

Podman Desktop 1.18 现已发布!点击此处下载

此版本带来了令人兴奋的新功能和改进:

  • 完善 Docker 兼容性功能:Docker 兼容性页面已移出实验模式,现在它可以帮助您完全设置 Podman,即使是通过 `brew` 安装的。它还会检测并通知您 Podman 无法绑定 Docker 套接字的情况。
  • 切换 Kubernetes 命名空间:现在可以在 Podman Desktop 内切换 Kubernetes 命名空间。
  • Kubernetes 中的作业:您现在可以在 Podman Desktop 日益增长的 Kubernetes 部分中看到 Kubernetes 作业。
  • 实验性状态栏提供程序增强:状态栏提供程序可以根据用户偏好进行固定和取消固定,并且提供程序状态图标已更新,更易于理解。

发布详情

Docker 兼容模式页面已退出实验模式 🎉

v1.13中引入的实验性 Docker 兼容性页面已移出实验模式。现在,所有与 Docker 兼容性相关的内容都可以在一个地方找到。此外,还添加了新的 Docker 兼容性相关通知,以使设置过程更容易,并在遇到问题时减少猜测。

Docker Compatibilty podman mac helper notificationDocker Compatibilty podman mac helper notification Docker Compatibilty docker socket notificationDocker Compatibilty docker socket notification

切换 Kubernetes 命名空间

在此之前,Podman Desktop 只支持切换 Kubernetes 上下文。通过此更新,您现在可以在 Podman Desktop 内部切换命名空间,而无需在应用程序外部执行任何操作。此选择不会修改您的 Kube 配置,并且在整个应用程序中都是持久的,因此如果您在一个地方选择了一个特定的命名空间,它将在 Podman Desktop 的其他所有地方使用。

Kubernetes namespacesKubernetes namespaces

Kubernetes 作业

作为我们持续进行的 Kubernetes 改进和增强工作的一部分,我们为 Kubernetes 作业添加了一个新标签页。您现在可以在一个地方查看所有作业,每个作业都有详情页面,并且可以删除和查看条件状态。

Kubernetes Jobs listKubernetes Jobs list Kubernetes Job detailsKubernetes Job details

实验性状态栏提供者增强功能

v1.16中引入的实验性状态栏提供程序已进行了一些更改,以使其更易于理解和使用。

新的提供程序状态图标包括:

  • 白点 - 运行中
  • 红点 - 错误
  • 向上箭头 - 有可用更新
  • 旋转圆圈 - 正在停止或启动
  • 较暗的图标 - 已停止

此外,您现在可以通过从状态栏固定或取消固定来选择要显示哪些可用的提供程序。

Status bar providersStatus bar providers

如果您对我们的实验性功能(或 Podman Desktop 的任何方面)有任何反馈或想法,请随时在相关的实验性功能 GitHub 讨论中告诉我们,该讨论可从设置页面的实验选项卡访问,或单击 Podman Desktop 右下角的评论图标并填写反馈表。

其他更改

重大变更

作为向 svelte 5 迁移的一部分,@podman-desktop/ui-svelte 包 v1.18.0 的 DetailsPageFormPage 组件引入了重大变更。

请在这些组件中使用 {#snippet <snippet-name>()} 代替插槽(slots)。

社区致谢

🎉 我们要向所有帮助 🦭 Podman Desktop 变得更好的朋友们表示衷心的感谢。在此版本中,我们收到了以下新朋友的拉取请求:

  • @j-bs#11456 docs(website): 使用 OS 选项卡组中的一致顺序做出了首次贡献
  • @chkpnt#10975 fix: 处理 macOS 系统中的代理绕过值时做出了首次贡献
  • @AlexonOliveiraRH#11710 docs: 添加启用 ip_tables 的指令做出了首次贡献
  • @Virakal#11792 fix(docs): docker export 语法做出了首次贡献
  • @fabienengels#12106 docs: 添加 EOST 作为采纳者做出了首次贡献

最后说明

此版本中修复的完整问题列表可在此处查看

从网站的下载部分获取最新版本,并使用 Podman Desktop 提升您的开发之旅。此外,访问GitHub 存储库,了解如何帮助我们使 Podman Desktop 变得更好。

详细发布变更日志

日常维护 ✅

  • 日常维护:更新发布流程,由 @benoitf 提交 #12192
  • 日常维护:向状态栏提供程序添加错误指示,由 @SoniaSandler 提交 #12191
  • 日常维护:为 CLOMonitor 排除一条规则,由 @benoitf 提交 #12169
  • 日常维护:为 CNCF 工具添加徽章,由 @benoitf 提交 #12158
  • 日常维护:添加 scorecard,由 @benoitf 提交 #12147
  • 日常维护:网站 - 更新页脚的 CNCF 标志和间距,由 @cdrage 提交 #12142
  • 日常维护:增加 lint 内存,由 @deboer-tim 提交 #12140
  • 日常维护:添加安全洞察文件,由 @benoitf 提交 #12138
  • 日常维护:网站 - 更新字体粗细和 div 宽度,由 @cdrage 提交 #12117
  • 日常维护:网站 - 更新下载链接,由 @cdrage 提交 #12115
  • 日常维护:改进提供程序小部件图标,由 @SoniaSandler 提交 #12112
  • 日常维护(vitest):移除未使用的文件,由 @axel7083 提交 #12110
  • 日常维护:允许在测试中使用更宽松的数据,由 @benoitf 提交 #12100
  • 日常维护:在 TerminalWindow 中添加缺失的 dispose 方法,由 @benoitf 提交 #12099
  • 日常维护:更新 estree-util-value-to-estree 至 v3.3.3,由 @benoitf 提交 #12085
  • 日常维护:更新 image-size 至 1.2.1,由 @benoitf 提交 #12084
  • 日常维护(package.json):build 应包含 build:preload:types由 @axel7083 提交 #12059
  • 日常维护:在某些地方使用 isUnixLike() 代替 isLinux(),由 @arrowd 提交 #12047
  • 日常维护:将关闭按钮迁移到 svelte 5,由 @deboer-tim 提交 #12043
  • 日常维护:FetchError 类型已从库中移除,由 @feloy 提交 #12042
  • 日常维护:启用 svelte/require-each-key 规则,由 @SoniaSandler 提交 #12041
  • 日常维护:更新至 podman 5.4.2,由 @feloy 提交 #12006
  • 日常维护(网站):修改了横幅和文档中的社区会议链接,由 @rujutashinde 提交 #11996
  • 日常维护:在 extension-api 中暴露 VmProviderConnection 和 VmProviderConnectionFactory,由 @SoniaSandler 提交 #11982
  • 日常维护(dockerode):升级到 3.3.37,由 @axel7083 提交 #11979
  • 日常维护:在实验模式下支持更改命名空间,由 @deboer-tim 提交 #11964
  • 日常维护:将状态图标迁移到 svelte 5,由 @deboer-tim 提交 #11961
  • 日常维护:在故障排除页面中添加 aria 角色和标签,由 @odockal 提交 #11960
  • 日常维护(deps-dev):更新 eslint-plugin-svelte 至 v3.5.0,由 @benoitf 提交 #11959
  • 日常维护:本地使用 lcov 报告器,由 @feloy 提交 #11951
  • 日常维护:失败的单元测试最多重试 3 次,由 @benoitf 提交 #11947
  • 日常维护:为 Windows 添加了显示手动安装步骤的对话框,由 @gastoner 提交 #11946
  • 日常维护:向 Kind 提供程序添加更新信息,由 @SoniaSandler 提交 #11936
  • 日常维护:迁移提供程序按钮 onclick,由 @deboer-tim 提交 #11934
  • 日常维护:将模态插槽迁移到 snippet,由 @deboer-tim 提交 #11932
  • 日常维护:将标签页迁移到 svelte 5,由 @deboer-tim 提交 #11929
  • 日常维护:用 json 输出替换 lcov 以获取覆盖率,由 @benoitf 提交 #11902
  • 日常维护:props 接口,由 @deboer-tim 提交 #11901
  • 日常维护:为 mac podman 套接字失败添加警报,由 @cdrage 提交 #11892
  • 日常维护:将设置 podman-mac-helper 添加到仪表板,由 @cdrage 提交 #11890
  • 日常维护:故障排除页面改进 - aria,由 @odockal 提交 #11888
  • 日常维护:移除 @typescript-eslint/no-explicit-any 的使用,由 @jeffmaury 提交 #11883
  • 日常维护(重构):将 Modal 组件迁移到 Svelte5,由 @jeffmaury 提交 #11881
  • 日常维护:将 ui 包图标更新到 svelte 5,由 @deboer-tim 提交 #11869
  • 日常维护(task-popup):添加了自动消失的任务弹出窗口,由 @gastoner 提交 #11867
  • 日常维护:将 ErrorMessage 组件更新到 svelte 5,由 @SoniaSandler 提交 #11866
  • 日常维护:移除旧的 docker 兼容性代码,由 @cdrage 提交 #11861
  • 日常维护:移除跟踪信息,由 @benoitf 提交 #11853
  • 日常维护(Carousel):将组件迁移到 svelte v5,由 @benoitf 提交 #11852
  • 日常维护:允许可选的 dock 属性,由 @benoitf 提交 #11850
  • 日常维护:启用 svelte/require-each-key 规则 - 第 5 部分 - image,由 @SoniaSandler 提交 #11840
  • 日常维护(configuration-impl):移除 any 的使用,由 @benoitf 提交 #11837
  • 日常维护:使下拉菜单的左侧控件可点击,由 @deboer-tim 提交 #11835
  • 日常维护:启用 svelte/require-each-key 规则 - 第 4 部分,由 @SoniaSandler 提交 #11834
  • 日常维护:更新了 tsconfig 并修复了类型检查,由 @gastoner 提交 #11832
  • 日常维护:将链接组件迁移到 svelte5,由 @gastoner 提交 #11830
  • 日常维护:向下拉菜单添加左侧 snippet,由 @deboer-tim 提交 #11810
  • 日常维护(storybook):添加带子项的 Table 故事,由 @axel7083 提交 #11808
  • 日常维护(config-registry):移除 any 的使用,由 @benoitf 提交 #11807
  • 日常维护:启用 svelte/require-each-key 规则 - 第 3 部分,由 @SoniaSandler 提交 #11795
  • 日常维护:启用 svelte/require-each-key 规则 - 第 2 部分 - kube 和 ingresses-routes,由 @SoniaSandler 提交 #11794
  • 日常维护:启用 svelte/require-each-key 规则 - 第 1 部分,由 @SoniaSandler 提交 #11793
  • 日常维护:修复对齐并使提供程序小部件保持一致,由 @deboer-tim 提交 #11781
  • 日常维护:克隆 kubeconfig 而不是从磁盘重新读取,由 @deboer-tim 提交 #11779
  • 日常维护:用于更改 kubernetes 命名空间的 api,由 @deboer-tim 提交 #11753
  • 日常维护:启用 svelte/require-store-reactive-access 规则,由 @cdrage 提交 #11726
  • 日常维护:kind 扩展 - 部署 ingress 时使用配置名称,由 @cdrage 提交 #11722
  • 日常维护:将 docker 兼容性移出实验模式,由 @SoniaSandler 提交 #11708
  • 日常维护:还原 #11340,由 @axel7083 提交 #11699
  • 日常维护(dependabot):分组更新 typedoc 依赖,由 @axel7083 提交 #11692
  • 日常维护:将 FreeBSDInfo 类引入 sys-info,由 @arrowd 提交 #11676
  • 日常维护:从仪表板移除 docker 兼容性警告,由 @cdrage 提交 #11675
  • 日常维护:为与 kubernetes-client v1.1.0 的兼容性做准备,由 @feloy 提交 #11668
  • 日常维护:为合并队列添加作业名称,由 @benoitf 提交 #11661
  • 日常维护:为 pr-check GH 操作也处理 merge_group 事件,由 @benoitf 提交 #11659
  • 日常维护:使用最新的 pnpm v10,由 @benoitf 提交 #11656
  • 日常维护:刷新依赖 (pnpm upgrade),由 @benoitf 提交 #11655
  • 日常维护:更新至 podman 5.4.1,由 @feloy 提交 #11653
  • 日常维护:将 babel 依赖从 7.26.0 更新到 7.26.10,由 @benoitf 提交 #11652
  • 日常维护:为 PR 检查添加 merge-group 选项,由 @benoitf 提交 #11646
  • 日常维护:更新 jsonpath-plus,由 @benoitf 提交 #11644
  • 日常维护:更新 axios,由 @benoitf 提交 #11643
  • 日常维护:更新 prismjs,由 @benoitf 提交 #11642
  • 日常维护:避免“变量在赋值前使用”的错误,由 @benoitf 提交 #11641
  • 日常维护:启用 svelte/no-immutable-reactive-statements,由 @feloy 提交 #11624
  • 日常维护:优先使用空值合并,由 @benoitf 提交 #11621
  • 日常维护:修复空值合并,由 @benoitf 提交 #11620
  • 日常维护:更改导入,由 @benoitf 提交 #11619
  • 日常维护:更改 json 文件的导入方式,由 @benoitf 提交 #11618
  • 日常维护:添加社区会议横幅,移除 AI Lab 横幅,由 @cdrage 提交 #11610
  • 日常维护:格式化未格式化的文件,由 @benoitf 提交 #11609
  • 日常维护:修复 svelte/infinite-reactive-loop,由 @benoitf 提交 #11607
  • 日常维护:网站使用 Node.js v22,由 @benoitf 提交 #11606
  • 日常维护(deps-dev):将 electron 从 34.3.0 升级到 35.0.1 并升级到 Node.js v22,由 @benoitf 提交 #11603
  • 日常维护:重构 spyOn,由 @benoitf 提交 #11601
  • 日常维护:修复空值合并,由 @benoitf 提交 #11600
  • 日常维护:移除 any 的使用,由 @benoitf 提交 #11599
  • 日常维护(code-guidelines):测试样式属性,由 @axel7083 提交 #11567
  • 日常维护:在提供程序小部件中指示是否有可用更新,由 @SoniaSandler 提交 #11556
  • 日常维护:移除了 no-reactive-reassign eslint 规则,由 @gastoner 提交 #11549
  • 日常维护:为 1.17 发布横幅添加眉题,由 @cdrage 提交 #11548
  • 日常维护(设置):将导航外观默认更改为图标加标题,由 @axel7083 提交 #11544
  • 日常维护:将终端服务移至 kubernetes,由 @deboer-tim 提交 #11520
  • 日常维护:清理 PodInfoUI kind,由 @deboer-tim 提交 #11519
  • 日常维护:从 pods 页面移除未使用的 kube 路径,由 @deboer-tim 提交 #11516
  • 日常维护:移除未使用的 pod 终端标签页,由 @deboer-tim 提交 #11500
  • 日常维护:pods 名称列清理,由 @deboer-tim 提交 #11499
  • 日常维护(deps-dev):将 eslint-plugin-svelte 从 2.46.1 升级到 3.0.2,由 @jeffmaury 提交 #11497
  • 日常维护:为 kubernetes 权限添加了权限监听器,由 @gastoner 提交 #11492
  • 日常维护:从 docker 扩展 svelte 中移除 no-explicit-any,由 @cdrage 提交 #11481
  • 日常维护:从部署中移除 no-explicit-any,由 @cdrage 提交 #11479
  • 日常维护:从 lib/dashboard 中移除 no-explicit-any,由 @cdrage 提交 #11478
  • 日常维护:减少可扩展组件的默认间距,由 @deboer-tim 提交 #11475
  • 日常维护:从 config map 空屏幕中移除 explicit-any,由 @cdrage 提交 #11435
  • 日常维护:移除 pod kubernetes 操作,由 @deboer-tim 提交 #11410
  • 日常维护(podman):tsconfig 中缺少 module 属性,由 @axel7083 提交 #11361
  • 日常维护:移除 podman pod kubernetes 导航,由 @deboer-tim 提交 #11352
  • 日常维护(electron):启用 web 安全,由 @axel7083 提交 #11340
  • 日常维护:从 lib/appearance 中移除 no-explicit-any,由 @cdrage 提交 #11282
  • 日常维护:从 lib/actions 中移除 no-explicit-any,由 @cdrage 提交 #11278
  • 日常维护:移除 @typescript-eslint/no-explicit-any 的使用,由 @jeffmaury 提交 #10998

测试 🚦

  • 日常维护(测试):参数化超时,由 @cbr7 提交 #12171
  • 日常维护(测试):使跟踪和视频删除可配置,由 @cbr7 提交 #12134
  • 日常维护(测试):添加编辑镜像时错误检查,由 @cbr7 提交 #12128
  • 修复(测试):修复扩展页面的标题定位器,由 @odockal 提交 #12101
  • 测试(ui):为按钮添加 svelte 遗留用法,由 @axel7083 提交 #12076
  • 日常维护(测试):重构导航栏的等待器,由 @cbr7 提交 #12065
  • 日常维护(测试):等待屏幕,由 @cbr7 提交 #12057
  • 日常维护(测试):切换到轮询断言以增强鲁棒性,由 @cbr7 提交 #12038
  • 日常维护(测试):处理由竞态条件抛出的异常,由 @cbr7 提交 #12033
  • 测试:为使用自定义配置的 Kind 集群部署添加 e2e 测试,由 @amisskii 提交 #12010
  • 日常维护(测试):增加超时以避免竞态条件,由 @cbr7 提交 #11958
  • 日常维护(测试):添加终端验证检查,由 @cbr7 提交 #11955
  • 日常维护(测试):修复 k8s e2e 测试,由 @amisskii 提交 #11928
  • 日常维护(测试):添加检查镜像徽章的方法,由 @cbr7 提交 #11897
  • 日常维护(测试):添加故障排除 pom 和冒烟 e2e 测试,由 @odockal 提交 #11891
  • 测试(ui/table):确保带子行的行被覆盖,由 @axel7083 提交 #11886
  • 测试:重构 preload/src/index.ts 的测试,由 @feloy 提交 #11828
  • 测试:k8s CronJob 资源页面的 e2e 测试,由 @amisskii 提交 #11812
  • 日常维护(测试):增加断言的超时时间,由 @cbr7 提交 #11788
  • 测试(e2e):在压力测试用例名称中添加了预期对象数量,由 @danivilla9 提交 #11768
  • 测试:k8s ingress e2e 测试,由 @amisskii 提交 #11752
  • 测试:新的 cli e2e 测试,由 @cbr7 提交 #11750
  • 日常维护(测试):Windows 的 Docker 兼容性 e2e 测试,由 @xbabalov 提交 #11721
  • 日常维护(测试):参数化严格匹配,由 @cbr7 提交 #11629
  • 日常维护(测试):修复 k8s e2e 测试,由 @amisskii 提交 #11628
  • 日常维护(测试):移除过时的方法,由 @cbr7 提交 #11617
  • 测试:k8s services e2e 测试,由 @amisskii 提交 #11604
  • 日常维护(测试):将端口转发操作提取到专用工具文件中,由 @amisskii 提交 #11588
  • 修复(测试):svelte 5.22.5,由 @axel7083 提交 #11568
  • 日常维护(测试):增强将镜像推送到 kind 的方法,由 @xbabalov 提交 #11494
  • 日常维护(测试):添加推送镜像 e2e 测试,由 @cbr7 提交 #11433
  • 日常维护(测试):跳过在 rootless 模式机器上运行的 kind 测试,由 @danivilla9 提交 #11388
  • 测试:由 @amisskii 添加镜像清单的 E2E 测试 #11186

文档 📖

  • 文档:由 @benoitf 添加更多 Readme 徽章 #12166
  • 文档:由 @benoitf 添加社区会议条目 #12159
  • 文档:由 @fabienengels 添加 EOST 作为采用者 #12106
  • 文档(网站):由 @shipsing 修正故障排除文档中的文件名 #12073
  • 文档(网站):由 @shipsing 更新 Kubernetes 部分以反映如何切换… #12009
  • 文档(网站):由 @shipsing 添加与扩展相关的用例及 API 参考 #11978
  • 文档(网站):由 @shipsing 在文档中添加故障排除部分 #11950
  • 文档(网站):由 @shipsing 在文档中为已发布的扩展添加链接 #11945
  • 文档(网站):由 @shipsing 添加了将 Podman Desktop 扩展发布到目录的详细信息 #11893
  • 文档(网站):由 @shipsing 根据最新更改更新了 Kubernetes 部分… #11718
  • 文档:由 @AlexonOliveiraRH 添加启用 ip_tables 的说明 #11710
  • 文档(网站):由 @shipsing 在文档中添加了卸载部分 #11689
  • 文档:由 @cdrage 向扩展页面添加更多信息 #11673
  • 文档(网站):由 @shipsing 修复格式问题 #11638
  • 文档:由 @jeffmaury 更新 RHEL 10 的 RHEL WSL 博客 #11625
  • 文档:由 @rujutashinde 向社区页面添加了演示、演讲和社区会议链接 #11554
  • 文档(网站):由 @shipsing 添加了一篇关于配置镜像仓库的博客 #11542
  • 文档(网站):由 @shipsing 添加了配置镜像仓库的步骤 #11465
  • 文档:queryBy vs getBy by @feloy #11446
  • 文档(网站):由 @benoitf 添加 1.17 版本的博客文章 #11431

ci 🔁

  • CI:由 @step-security-bot 强化 GitHub Actions #12162
  • CI:由 @step-security-bot 强化 GitHub Actions #12160
  • CI:由 @benoitf 调整 codecov 报告 #11770
  • CI:由 @benoitf 向 codecov 报告单元测试覆盖率 #11769

功能 💡

  • 功能:由 @deboer-tim 为清单添加导航 API #12143
  • 功能(vitest):由 @axel7083 配置工作空间 #12111
  • 功能(PinRegistry):由 @axel7083 添加遥测事件 #12088
  • 功能(status-bar):由 @axel7083 固定/取消固定提供程序 #11973
  • 功能:由 @feloy 实现虚拟机提供程序详情/终端 #11948
  • 功能:由 @feloy 创建虚拟机提供程序前端 #11924
  • 功能:startProvider 适用于虚拟机连接,由 @feloy #11880
  • 功能:由 @feloy 向前端添加虚拟机提供程序生命周期 #11863
  • 功能(ProviderButton):由 @axel7083 添加左侧插槽 #11862
  • 功能:由 @feloy 更新虚拟机的 start/stop/editProviderConnectionLifecycle #11839
  • 功能:由 @feloy 创建虚拟机提供程序连接(后端)#11827
  • 功能:由 @feloy 将虚拟机提供程序信息添加到 ProviderInfo 结构中 #11787
  • 功能:由 @feloy 实现 setVmProviderConnectionFactory #11777
  • 功能(前端):由 @axel7083 向提供程序小部件添加 class 属性 #11775
  • 功能:由 @deboer-tim 添加更改 Kubernetes 命名空间的控件 #11756
  • 功能:由 @feloy 注册虚拟机提供程序连接 #11755
  • 功能(extensions/kind):由 @Blaimi 将 projectcontour 更新至 v1.30.2 #11734
  • 功能(pin-registry):由 @axel7083 向主世界公开 pin / unpin / list #11701
  • 功能:由 @axel7083 向主世界公开 ListImagesOptions #11700
  • 功能:由 @feloy 在 Kubernetes 仪表板中表示未授权的资源 #11639
  • 功能:由 @feloy 处理 exec 命令未找到时的错误 #11608
  • 功能:由 @feloy 在 Kubernetes 实验模式下显示资源计数 #11529
  • 功能:由 @cdrage 向 Kubernetes 添加 Jobs #11474
  • 功能:由 @deboer-tim 为学习中心使用可展开组件 #11470
  • 功能:由 @feloy 实现 Kubernetes 实验性后端提供活动资源计数 #11467
  • 功能(main):由 @axel7083 为提供程序添加 pin-registry #11422
  • 功能:由 @bmahabirbu 添加从状态栏自动滚动到提供程序的功能 #11420
  • 功能:由 @gastoner 为 Kubernetes 权限添加了可视化指示器 #11307
  • 功能:由 @axel7083 实现 kube play 构建支持 #10801
  • 功能:由 @Firewall 添加社区页面 #10551

修复 🔨

  • 修复:由 @deboer-tim 修复镜像详情导航 #12139
  • 修复(Button):由 @axel7083 绑定用法和事件类型 #12086
  • 修复(UI):由 @axel7083 修复 ImageDetailsCheck 测试中的竞态条件 #12077
  • 修复:由 @jeffmaury 在 Windows 上也使用中间 CA 存储 #12066
  • 修复:由 @bmahabirbu 更新了 configmap 和 secret 的大小写 #12048
  • 修复:由 @feloy 移除不必要的赋值 #12036
  • 修复:由 @jeffmaury 在通过回调发送结果前重置 messageBox #12008
  • 修复(Table.svelte):由 @axel7083 修复 children 函数的用法 #11980
  • 修复(PinRegistry):由 @axel7083 修复监听器和虚拟机支持 #11976
  • 修复:由 @feloy 修复命名空间下拉菜单的测试 #11971
  • 修复(UI):由 @axel7083 使 Carousel 成为通用组件 #11922
  • 修复:由 @feloy 修复 Kubernetes 仪表板上没有当前上下文的问题 #11903
  • 修复:由 @benoitf 确保在切换 docker 上下文后刷新上下文列表 #11898
  • 修复:由 @deboer-tim 在创建 kind 集群时等待 kubeconfig 更改 #11868
  • 修复(dropdown):由 @axel7083 确保 onChange 的值为非 undefined #11860
  • 修复:由 @deboer-tim 修复名称列的对齐方式 #11838
  • 修复:由 @amisskii 为 Kubernetes Ingress/Routes 资源添加删除确认对话框 #11806
  • 修复(storybook/expandable):由 @dgolovin 启用 no-useless-children-snippet 规则并修复一处违规 #11797
  • 修复:由 @SoniaSandler 更新状态栏中第一个提供程序的工具提示位置 #11796
  • 修复(文档):由 @Virakal 修复 `docker export` 语法 #11792
  • 修复(前端):由 @axel7083 修复状态栏顺序 #11773
  • 修复:由 @feloy 在 Kubernetes 提供程序被销毁时从 map 中移除 #11767
  • 修复(extensions/kind):由 @Blaimi 在 download.ts 中使用正确的类型 #11733
  • 修复:由 @deboer-tim 修复 Kubernetes 名称列的对齐问题 #11732
  • 修复:由 @odockal 将最低 node 类型更新至 v22 #11730
  • 修复:由 @bmahabirbu 启用 svelte no-reactive 规则并测试了相关文件 #11709
  • 修复(tools):由 @axel7083 移除 generator.spec.ts 中的 no-explicit-any #11706
  • 修复(preload-webview-spec):由 @axel7083 移除 no-explicit-any #11705
  • 修复(preload-webview-index):由 @axel7083 移除 no-explicit-any #11704
  • 修复(渲染器):由 @axel7083 修复在有多个连接时从现有容器创建容器的问题 #11702
  • 修复:由 @feloy 修复在 404 错误时 informer 不应被声明为离线 #11674
  • 修复:由 @benoitf 修复网站 sprint 链接 #11663
  • 修复:由 @vzhukovs 为 flatpak 构建授予对容器目录的访问权限 #11654
  • 修复:由 @bmahabirbu 在 PATH 检查中移除了 compose /usr/local/bin,以与 kubectl 保持一致 #11651
  • 修复:由 @feloy 修复实验性 Kubernetes 不使用 ResourceName 的问题 #11616
  • 修复:由 @SoniaSandler 使创建新连接表单中的标签能够正确调整大小,并更新了表单组件的宽度 #11532
  • 修复:由 @deboer-tim 修复按钮焦点轮廓 #11483
  • 修复:由 @deboer-tim 添加返回按钮的光标指针 #11471
  • 修复:由 @vzhukovs 修复输入字段的正确验证 #11359
  • 修复:由 @chkpnt 修复在 macOS 下处理系统代理绕过值的问题 #10975

配置镜像仓库

·阅读时间 3 分钟
Shipra Singh
技术文档工程师

Docker Hub 最终用户许可协议 (EULA) 施加的较低速率限制,使得社区成员难以频繁访问 `docker.io` 镜像。解决此问题的一个简单方法是在 `registries.conf` 文件中为 `docker.io` 注册表配置一个镜像。这样,他们就可以在需要时访问 Docker 资源。

通过 Podman Desktop UI,您可以轻松添加注册表位置并配置其镜像。配置镜像会将注册表重定向到另一个位置,使您能够使用其内容。例如,如果您已将 `ghcr.io` 配置为 `docker.io` 的镜像,并尝试拉取资源,Podman 将从 `ghcr.io` 而不是 `docker.io` 拉取资源。

这篇博客文章将介绍如何为 docker.io 仓库配置镜像。

先决条件

配置:为 docker.io 配置镜像

  1. 转到 Settings > Resources 页面。
  2. 在 Podman 磁贴中选择“更多选项”>“设置注册表配置”。将打开一个命令面板。 设置注册表配置
  3. 设置您的仓库配置
  4. 从命令面板中选择“添加注册表配置”选项。 添加注册表配置
  5. 键入注册表的位置,例如 `docker.io`,然后按 `Enter` 键。`docker.io` 注册表已添加到调色板中。 docker.io 注册表已添加
  6. 从命令面板中选择 docker.io
  7. 键入您希望镜像注册表的位置,例如 `ghcr.io`,然后按 `Enter` 键。`docker.io` 注册表的条目将显示其镜像位置。 镜像注册表位置
  8. 选择“结束配置注册表”选项以结束注册表配置。 结束注册表配置

验证:镜像

没有直接的方法可以从 UI 验证镜像配置。但是,您可以使用 CLI 进行验证。

  1. 与默认的 Podman machine 启动一个交互式会话
$ podman machine ssh <machine_name>
  1. docker.io 拉取一个无效的镜像。
$ podman pull docker.io/invalid

终端中会出现一条错误消息,指示从镜像拉取镜像失败。您将收到错误消息:Mirrors have also failed

Podman Desktop 1.17 发布

·阅读时间 29 分钟
Florent Benoit
首席软件工程师

Podman Desktop 1.17 发布!🎉

podman-desktop-hero-1.17

Podman Desktop 1.17 现已发布!点击此处下载

此版本带来了令人兴奋的新功能和改进:

  • 新的运行工作流 🛠️:只需几步即可从镜像启动容器。
  • 镜像仓库镜像配置 🔄:使用专用命令简化镜像仓库镜像设置。
  • 更流畅的 kind 集群体验 ☁️:即使没有预装 kind 二进制文件,也能轻松启动 Kubernetes 集群。
  • Podman 5.4 🚀:升级到最新的 Podman 引擎以获得增强的性能和功能。
  • 重新定义的 Pods 📦:明确区分 Podman pods 和 Kubernetes pods,以提高可用性。
  • Kubernetes 实验模式 ⚡:改变资源收集和监控的方式。

Podman Quadlets 与 Podman Desktop

·5 分钟阅读
Axel Stefanini
软件工程师

banner

容器通常部署在 Kubernetes 集群中。然而,对于单节点服务器或开发过程中的小规模用例,Kubernetes 可能有些大材小用。

对于运行包含多个交互容器的自治应用程序,有什么更轻量级的解决方案呢?

在这篇博客中,我们将深入探讨 Quadlet 是什么、它们的优势,以及如何在 Podman Desktop 中使用它们。

Podman Desktop 1.16 发布

·阅读时长 19 分钟
Philippe Martin
首席软件工程师

Podman Desktop 1.16 版本发布!🎉

podman-desktop-hero-1.16

Podman Desktop 1.16 现已发布!点击此处下载

此版本带来了令人兴奋的新功能和改进:

  • 实验性功能:设置中新增“实验性”部分,提供当前实验功能列表及相关讨论链接
  • 供应器显示在状态栏:供应器从仪表板移至状态栏,以提高其可见性(实验性功能)
  • 仅清理未标记的镜像:清理镜像时,可选择清理“所有未标记的镜像”或“所有未使用的镜像”
  • 在容器日志中搜索:可在容器和 Pod 的日志中搜索特定术语
  • Kubernetes: 仅监控当前上下文:默认情况下仅监控当前上下文

将 CNCF 项目与 Podman Desktop 结合使用

·4 分钟阅读
Charlie Drage
软件工程师

plane

Podman Desktop 是一个强大的工具,用于管理和可视化云原生应用程序,并且可以与一系列 CNCF(云原生计算基金会)项目无缝交互。

对于处理单容器应用、使用 Compose 文件的多容器配置以及 Kubernetes 集群上的复杂分布式应用的开发人员来说,它是一个易于上手的平台。

Podman Desktop 在 CNCF 项目中的主要功能

Podman Desktop 汇集了三大强大功能,用于管理从小到大各种规模的项目:

  • 容器管理:支持创建、运行和监控容器。
  • Compose 支持:允许您部署在Compose 文件中定义的应用程序。这对于管理需要多个服务(如 Web 服务器、数据库和缓存)的应用程序特别有用。
  • Kubernetes 集成:提供管理多节点 Kubernetes 集群的工具,使其成为处理需要跨多个 Pod 和服务进行编排的更复杂分布式应用程序的理想选择。您可以使用 Podman Desktop 通过我们的MinikubeKind扩展来设置您自己的开发集群。

Minikube

Minikube 是一个本地 Kubernetes 开发集群,它提供了一种学习和开发 Kubernetes 的简单方法。

Minikube 可以与 Podman Desktop 无缝集成,从而在 Podman 环境中实现 Kubernetes 开发工作流程。这通过安装 Minikube 扩展实现,该扩展允许直接从 Podman Desktop 创建、管理和部署集群。

以下视频提供了从安装到创建集群的完整指南。

Backstage

Backstage 是一个由 Spotify 设计的开源平台,用于构建开发者门户。它使工程团队能够创建定制的集中式中心,用于管理和记录其服务、应用程序和基础设施。Backstage 的可扩展架构包括用于对软件组件进行编目、组织文档、管理云资源和跟踪工作流的功能。

部署 Backstage 的一种流行方法是通过 Helm chart。部署后,您可以在 Kubernetes 仪表板中查看 Backstage 的服务,以监控组件并确保正确配置。

backstage services

您还可以使用 Podman Desktop 的端口转发功能访问您部署的 Backstage 实例。此功能允许您安全地将本地端口转发到在 Kubernetes 集群上运行的 Backstage 服务,从而可以轻松地从本地浏览器访问该实例。

backstage port forward

Dapr

Dapr (Distributed Application Runtime) 是一个开源、事件驱动的运行时,旨在帮助开发者构建可在云或边缘环境中无缝运行的弹性、无状态和有状态应用程序。

Dapr 抽象了分布式系统的复杂性,为服务调用、状态管理、发布/订阅消息传递和资源绑定提供了构建块,从而简化了微服务和云原生应用程序的开发。

通过遵循 Dapr 的自托管 Podman 设置指南,您可以使用 Podman 在本地环境中部署 Dapr。

在安装 Dapr CLI 后,要使用 Podman 初始化 Dapr,请执行以下命令:

$ dapr init --container-runtime podman

初始化后,您可以在 Podman Desktop 中直接管理 Dapr 并与之交互。

dapr

此外,Podman Desktop 还提供了一个“启动浏览器”按钮,可以快速方便地访问 Dapr UI 以进行监控和管理。

dapr browser

结论

无论您是管理 Kubernetes 集群、利用 Backstage 的强大功能构建开发者门户,还是使用 Dapr 部署微服务,Podman Desktop 都提供了一个统一的环境来简化您的工作流程。

查看 毕业和孵化中项目的列表,发现更多使用 Podman Desktop 的可能性。

Podman Desktop + CNCF - 社区驱动的举措

·阅读时间 6 分钟
Markus Eisele
产品营销
Stevan Le Meur
产品经理

banner

今天,我们很高兴地宣布,我们已申请将 Podman Desktop 加入云原生计算基金会 (CNCF) 作为沙盒项目。这对我们的项目和社区来说是一个重要的里程碑,我们对未来充满期待。

关于 Podman Desktop

Podman Desktop 以 Podman 带来的创新为基础,为容器化开发提供了一个强大而用户友好的环境。Podman 提供了一个无守护进程、无根的容器引擎,增强了安全性和灵活性,而 Podman Desktop 则提供了一个直观的图形界面,用于管理容器和与 Kubernetes 交互。它通过插件系统得到增强,允许开发者根据自己的需求定制其内部循环容器工作流程,并为其他项目以及其他容器引擎提供了灵活的扩展点。

为何选择 CNCF?

CNCF 是云原生世界的重要组织,它支持协作并推动 Kubernetes、Prometheus 和 Envoy 等关键项目的创新。作为 CNCF 项目,Podman Desktop 将受益于更高的知名度、开放治理的独立归属以及丰富的资源和专业知识。CNCF 项目将重新对与我们合作产生兴趣。此举将帮助我们扩大社区,确保项目的长期可持续性,并加速其发展。

Podman Desktop 如何简化容器和 Kubernetes

使用容器进行开发可能会很复杂。Podman Desktop 通过提供直观的界面和强大的工具来构建、管理和运行容器,从而简化了这一点。这使开发者能够专注于编写代码,而不是与基础设施作斗争。为什么这很重要?因为在当今复杂的世界上,开发者生产力至关重要。通过消除摩擦并简化工作流程,Podman Desktop 使开发者能够更快地交付价值。Podman Desktop 使开发者能够在本地运行 Kubernetes,模仿其生产环境。这消除了“在我的机器上可以运行”的问题,并允许及早发现配置问题。通过缩小开发和生产之间的差距,Podman Desktop 降低了部署风险并加速了反馈循环。这导致更高质量的软件和更快的发布周期。

开源与 CNCF:开发者工具的完美搭配

我们坚信开源的力量。开源软件促进透明度,鼓励协作,并推动创新。通过将 Podman Desktop 捐赠给 CNCF,我们确保它保持开放和对所有人可用,围绕它培育一个充满活力的社区。CNCF 是 Podman Desktop 的完美归宿,因为它倡导开源价值观,并为协作开发提供了一个中立的平台。这确保了 Podman Desktop 保持供应商中立,并由用户的需求驱动,保持选择开放并避免供应商锁定。

此外,虽然 CNCF 促进了令人难以置信的创新,并且许多开发者受益于 CNCF 提供的项目数量,但人们认识到需要更多面向开发者的工具。Podman Desktop 通过为容器化、管理和部署云原生应用程序提供以开发者为中心、流线型和直观的体验,完美地填补了这一空白。Podman Desktop 由于其设计和功能而与 Kubernetes 具有天然的亲和性,它无缝地弥合了本地容器开发和 Kubernetes 部署之间的差距。这种密切的关系与 CNCF 推动云原生技术采用的使命完美契合。

加入不断壮大的 Podman Desktop 社区

作为 CNCF 项目,我们有机会向更广泛的贡献者和用户社区敞开大门。我们相信开源在协作和多元视角下蓬勃发展。通过扩大我们的贡献者基础,我们可以加速创新,提高 Podman Desktop 的质量,并确保它满足不同用户的需求。

您可以通过多种方式做出贡献

  • 报告问题:如果您遇到错误或有改进建议,可以在GitHub 问题跟踪器上报告。请务必提供详细信息和重现问题的步骤。

  • 处理问题:您可以浏览问题跟踪器,并通过修复错误或实现新功能来做出贡献。这包括派生存储库、进行更改和提交拉取请求。

  • 贡献代码:除了解决现有问题外,您还可以提议并贡献全新的功能或增强 Podman Desktop 的功能、用户界面或与其他工具的集成。了解有关如何贡献的更多信息。

  • 贡献插件:觉得缺少集成功能?您可以为 Podman Desktop 贡献自己的插件功能。查看指南

  • 改进文档:清晰全面的文档至关重要。您可以通过改进现有文档、添加新指南或创建教程来做出贡献。

  • 为网站做贡献:Podman Desktop 网站也是开源的。您可以为其内容、设计或翻译做出贡献。

  • 成为采用者:如果您是满意的用户,我们很乐意知道并分享。考虑通过拉取请求将您自己或您的组织添加到采用者列表中。

在您开始贡献之前,熟悉项目的贡献指南和代码架构会有所帮助。这些资源提供了有关编码风格、测试程序和整体开发过程的宝贵信息。您还可以加入 Kubernetes Slack 上的 #podman-desktop 频道,与其他贡献者联系并获得帮助。

KubeCon 2024 及未来

我们将在盐湖城的 KubeCon NA 2024 上正式宣布这一激动人心的消息,并分享更多关于 Podman Desktop 和我们的路线图。欢迎来到 Red Hat 展位打招呼,为项目做出贡献,并帮助我们塑造云原生开发的未来。

参与并了解更多

我们对 Podman Desktop 的新篇章感到无比兴奋,并迫不及待地想看看我们能与 CNCF 社区一起取得怎样的成就。

使用 Podman Desktop 创建 MicroShift 可启动镜像

·8 分钟阅读
Charlie Drage
软件工程师

banner

如果您不熟悉 BootC,它提供了一种令人印象深刻的方法,可以直接从单个 Containerfile 或预先存在的支持 bootc 的镜像将应用程序部署到裸机。

一个“可启动”镜像,也称为 BootC 容器镜像,允许您使用一个简单的容器镜像来创建一个完整的可启动操作系统,无论是 raw 格式的虚拟机镜像还是用于 USB 安装的 iso

此功能非常适合各种用途,从简单的 HTTP 服务器到为全栈应用程序提供支持的操作系统。

在本教程中,我们将部署一个名为 MicroShift 的 OpenShift 衍生版本,它是 OpenShift 的边缘优化版本,专为资源受限配置上的单节点设置而设计。将其视为 OpenShift 的紧凑版本!

整个过程都通过一个单独的 Containerfile(或 Dockerfile)来完成。

要求

开始本教程前,请确保您已具备:

构建 BootC 容器镜像

首先,我们将构建初始的 BootC 容器镜像,稍后我们将用它来创建一个可启动的操作系统。

登录 Red Hat 镜像仓库

在继续之前,请从目录中下载 Red Hat Authentication 扩展,以启用对 Red Hat 镜像仓库的访问。

red hat login

然后登录您的帐户。

red hat login sign in

下载您的 OpenShift 混合云拉取密钥

下载您的拉取凭证

它会以 pull-secret.txt 的形式下载。请将其存放在安全的位置。

创建 Containerfile(或 Dockerfile)

Containerfile 对于创建可启动镜像至关重要。

需要注意的是,在构建过程中,我们将提供*一个*参数,即 PASSWORD,以便通过 redhat 用户名登录虚拟机。

我们将使用 MicroShift 镜像模式 GitHub 文档中的 Containerfile。

将上述链接中的 Containerfile 复制到一个新文件中,我们将使用 Podman Desktop 来构建它。

$ curl https://raw.githubusercontent.com/openshift/microshift/main/docs/config/Containerfile.bootc-rhel9 -o Containerfile

使用 Podman Desktop 构建

选择 Containerfile 并在 Podman Desktop 中构建它。

您需要提供:

  • 在 Containerfile 中创建的 redhat 用户的密码。

在构建页面的参数中以 USER_PASSWD 的形式传递该参数。

build

使用 BootC Podman Desktop 扩展构建可启动镜像

安装

从扩展目录安装 BootC Podman Desktop 扩展。

install

构建镜像

现在,从我们的容器镜像创建可启动镜像!

点击导航栏上新的 BootC 图标,然后转到构建页面。

build_button

构建完成后,您会在仪表盘上看到一条确认信息。

接下来,选择我们构建的镜像,并为测试可启动镜像选择一个合适的输出格式。对于使用 QEMU 和其他虚拟机软件(如 libvirt)进行本地测试,RAW 是一个常见的选择。

测试镜像

探索各种测试镜像的方法,可以使用本地软件或云平台。以下是使用 RAW 输出的可启动镜像的一些常见步骤。

运行虚拟机

本指南不涵盖所有运行虚拟机的方法,但以下是最常见的几种:

当使用 Hyper-V 时,用 BootC 创建一个 .vhd 镜像。

  1. 构建时,选择 .vhd 选项。
  2. 安装 Hyper-V
  3. 导入虚拟机

配置和验证 MicroShift

启动虚拟机后,您现在可以配置 MicroShift 并验证连接。

复制 OpenShift 拉取凭证

在继续验证 OpenShift 之前,必须先将 OpenShift 拉取凭证复制过去,以便 MicroShift 可以下载需要 Red Hat 镜像仓库认证的容器镜像。

下面我们将把您之前下载的 OpenShift 凭证复制到虚拟机中。

  1. 下载您的 OpenShift 拉取凭证,它会以 pull-secret.txt 的形式下载。

  2. 使用 scp 复制到虚拟机

$ scp -P 2222 pull-secret.txt redhat@localhost:~/
  1. 通过 SSH 登录到虚拟机
$ ssh redhat@localhost -p 2222
  1. 将凭证移动到 /etc/crio/openshift-pull-secret
$ sudo mv pull-secret.txt /etc/crio/openshift-pull-secret
  1. 重启 microshift 服务
$ sudo systemctl restart microshift

列出 Pod

下面我们将通过 SSH 登录到虚拟机,并确认 MicroShift 正在正确部署 Pod。

  1. 通过 SSH 登录到虚拟机
$ ssh redhat@localhost -p 2222
  1. 将生成的 kubeconfig 文件复制到 ~/.kube/config
$ mkdir -p ~/.kube
$ sudo cp /var/lib/microshift/resources/kubeadmin/kubeconfig ~/.kube/config
$ sudo chown redhat ~/.kube/config
  1. 使用 ockubectl 验证 Pod 是否正在运行
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system csi-snapshot-controller-856bb8b9bc-9n7lj 1/1 Running 1 3d23h
kube-system csi-snapshot-webhook-7c64d4d4d7-98v6l 1/1 Running 1 3d23h
openshift-dns dns-default-n2td4 2/2 Running 2 3d23h
openshift-dns node-resolver-7cslg 1/1 Running 1 3d23h
openshift-ingress router-default-7cbc67954b-nqqc6 1/1 Running 1 3d23h
openshift-ovn-kubernetes ovnkube-master-zcqw5 4/4 Running 5 3d23h
openshift-ovn-kubernetes ovnkube-node-crnn9 1/1 Running 2 3d23h
openshift-service-ca service-ca-6799f567-k7lsc 1/1 Running 1 3d23h

使用 Podman Desktop 验证 MicroShift

或者,您可以将 MicroShift 配置文件复制到本地计算机,并在 Podman Desktop 上进行远程测试。

  1. 在您的本地计算机上,如果 .kube 目录不存在,请创建它。
$ mkdir ~/.kube
  1. 将远程 kubeconfig 文件复制到本地配置文件

在 MicroShift 中,一个 kubeconfig 文件会自动创建在 /var/lib/microshift/resources/kubeadmin/kubeconfig

将该文件复制到您的本地系统

scp -P 2222 redhat@localhost:/var/lib/microshift/resources/kubeadmin/kubeconfig ~/config

如果您已经有一个 ~/.kube/config 文件,请将 config 的内容复制到 ~/.kube/config 文件中。

  1. 使用 Podman Desktop 验证 MicroShift 集群

Podman Desktop 将自动检测您的 .kube/config 文件。

注意:您可能需要修改您的 .kube/config 文件,以反映您集群的正确域名或 IP 地址。

cluster

存储配置

默认情况下,存储配置需要一个 LVM 分区,并且 LVMS 存储管理器将不会部署。这是由于构建 RAW 镜像时的限制。需要替代的非本地存储解决方案才能使用具有存储功能的 OpenShift 工件。添加 LVM 支持的功能在此拉取请求中进行跟踪。

结论

本教程提供了使用 Podman Desktop 和 BootC 扩展部署可启动 MicroShift 镜像的逐步指南。通过利用 BootC 和 Podman 等工具,我们简化了创建轻量级但功能齐全的 OpenShift 环境的过程,适用于单节点边缘计算场景。

感谢您的跟随,祝您部署愉快!

Podman Desktop 扩展简介

·4 分钟阅读
Charlie Drage
软件工程师

programming

扩展是自定义和扩展 Podman Desktop 功能的强大工具。无论您是想添加新的容器管理功能、简化当前工作流程,还是创建特定于您的技术栈的自定义 UI 元素,构建扩展都可以让您根据您的特定需求定制 Podman Desktop 体验。

在本指南中,我们将介绍如何构建自己的 Podman Desktop 扩展,并提供详细文档链接,涵盖该过程的每个部分。

扩展简介

Podman Desktop 中有丰富的扩展,可以在 扩展 -> 目录 部分找到。

extension catalog

每个扩展都基于 Podman Desktop 进行扩展,例如提供带有 Minikube 的 Kubernetes 开发集群,甚至分析您的镜像层

以下是镜像层浏览器扩展及其如何集成到 Podman Desktop 中的示例。

layers_explorer

开始您的项目

创建扩展的第一步是设置项目环境。要了解如何配置项目和添加基本组件,请查看创建扩展模板指南,它将引导您从官方模板初始化项目。

添加 UI 组件

创建扩展时最常见的任务之一是添加用户界面。无论是添加按钮、面板还是图标,UI 组件都有助于使您的扩展更具交互性和可访问性。添加 UI 组件是完全可选的,扩展可以在没有 UI 组件的情况下运行。在添加 UI 组件文档中了解更多信息,您将在其中找到创建和将组件集成到应用程序 UI 中的说明。

使用图标

图标是使您的扩展在视觉上更具独特性的好方法。您可以按照添加图标文档学习如何添加和样式化自定义图标。

以下是 bootc 扩展如何向 Podman Desktop 内的镜像列表添加图标的示例。

icons

扩展通常与现有菜单和导航集成,以便用户轻松访问新命令和功能。如果您想向上下文菜单添加项目,请浏览菜单配置文档,其中解释了如何将命令添加到菜单并使用 When 子句控制其显示时间。

以下是 bootc 扩展如何向镜像列表添加新菜单命令的示例。

menus

添加和配置命令

命令是大多数扩展的支柱,允许用户与应用程序交互并触发特定操作。

如果您需要定义和注册自定义命令,命令指南将向您展示如何创建响应用户操作或输入的命令,并将其与扩展的工作流程绑定。

您还可以配置这些命令以在不同的上下文中出现。请查看When 子句上下文文档,了解有关将命令限制为特定场景的更多信息。

命令受VS Code 命令的强烈影响,并且可以类似地进行配置。有关更多信息,请参阅我们的命令指南

设置入门工作流

创建一个流畅的入门体验对于帮助用户开始使用您的扩展至关重要。这包括 CLI 二进制文件安装或其他初始设置值的步骤。

您可以使用入门工作流指南提供指导、教程或初始设置步骤。

以下是内置 compose 扩展如何为 compose CLI 二进制文件安装添加入门流程的示例。

compose

配置设置

构建好组件和命令后,您可能希望为扩展的高级用法设置配置选项。

配置文档概述了配置文件的结构以及如何将所有内容链接在一起以使用用户特定的值。

发布您的扩展

发布使用户能够安装您的扩展,您可以将您的扩展编译成容器镜像,供用户轻松使用。请遵循发布指南,了解如何分发您的扩展。

结论

创建扩展为根据您的特定需求定制 Podman Desktop 开启了无限可能。

打包和发布您的扩展以供他人使用也很容易。

祝您在探索我们关于如何创建扩展的文档中玩得开心,编码愉快!

Podman Desktop 1.13 发布

·7 分钟阅读
Sonia Sandler
助理软件工程师

Podman Desktop 1.13 发布! 🎉

podman-desktop-hero-1.13

Podman Desktop 1.13 现已发布。点击此处下载

此版本包含

  • Hyper-V 支持:您现在可以直接从 Podman Desktop 创建和管理 Hyper-V Podman 虚拟机。
  • 镜像搜索功能:从 Podman Desktop 搜索镜像。
  • 更新了空状态页面:只需点击按钮,即可在容器、镜像、Pod 和 Kubernetes 页面开始您的旅程。
  • 新的 Kubernetes 导航:所有与 Kubernetes 相关的页面都已移至一个单独的子菜单,以便更轻松、更简洁地导航。
  • 镜像层浏览器扩展:通过这个新扩展,您可以浏览镜像的各个层。
  • 实验性的 Docker 兼容模式页面:您现在可以试用我们实验性的 Docker 兼容模式页面。

使用 Podman Desktop 构建您的 Kubernetes 应用程序

·阅读时间 6 分钟
Shipra Singh
技术文档工程师

Podman Desktop 与 Kubernetes 的集成分可帮助您在 Kubernetes 集群(例如 Kind 或 Minikube)上运行您的应用程序。

本博客涵盖以下几个方面

  • 从镜像仓库中的镜像构建容器化应用程序
  • 创建 pod
  • 设置本地 Kubernetes 集群
  • 将应用程序部署到 Kubernetes
  • 验证正在运行的服务

构建容器化应用程序

通过本博客,您将构建一个使用以下组件的容器化应用程序

  • 一个后端 Redis 服务器容器
  • 一个前端 Python 应用程序容器

为此,您可以从 quay.io 镜像仓库拉取相关镜像。

  1. 前往 Images (镜像) 组件页面。

  2. 点击 Pull (拉取)。 pull from registry

  3. 启动第一个容器

    1. 输入要从注册表拉取的镜像名称。例如,`quay.io/podman-desktop-demo/podify-demo-backend`。 输入镜像名称
    2. 点击 Pull image (拉取镜像)。此时会打开一个下载完成的通知。
    3. 点击 完成
    4. 单击与新添加的镜像对应的“运行镜像”图标。 运行镜像
    5. 输入容器名称 redis-server
    6. 点击 Start Container (启动容器)。 start a back-end container
    7. 单击“日志”选项卡以查看 Redis 服务器正在独立模式下运行。 查看日志选项卡
  4. 启动第二个容器

    1. 输入要从镜像仓库中拉取的镜像名称。例如,quay.io/podman-desktop-demo/podify-demo-frontend

    2. 点击 Pull image (拉取镜像),然后点击 Done (完成)。

    3. 点击新添加镜像对应的 Run Image (运行镜像) 图标。

    4. 输入容器名称 python-appenter image name

      注意

      如果默认端口已被占用,您可以在 Port mapping (端口映射) 字段中指定一个不同的端口。

    5. 选择 Networking (网络) 选项卡,输入主机名 redis-server 和 IP 地址 10.88.0.2 以启用与 Redis 服务器的通信。

      注意

      您可以在 redis-server 容器详情页面的 Inspect (检查) 选项卡中找到 IP 地址。

    6. 点击 Start Container (启动容器)。 start a front-end container

    7. 单击“日志”选项卡以查看应用程序正在端口 `5000` 上运行。 前端应用程序正在运行

    8. 点击页面右侧的 Open browser (打开浏览器) 图标。

    9. 查看正在运行的前端应用程序。 running front-end application

创建 Pod

您可以使用这两个容器来创建一个 Pod。这样,前端和后端容器应用可以共享资源,例如存储和网络。

使用现有容器创建 Pod

  1. 前往 Containers (容器) 页面。
  2. 同时选择前端和后端容器。
  3. 点击 Create Pod (创建 Pod) 按钮。 create a pod from containers
  4. 点击 Create Pod (创建 Pod)。 copying containers to a pod
  5. 在 Pods 页面上查看新创建的 Pod。
  6. 点击 Pod 的名称,然后点击“摘要”选项卡查看其摘要。 查看 Pod 详细信息

替代方案:使用 Kubernetes YAML 创建 Pod

您可以为任何现有的 Pod 或容器生成 Kubernetes 清单,并用它来创建本地 Kubernetes YAML 文件。然后,您可以自定义该文件并从中创建一个 Pod。

在创建 Pod 时,您可以选择一个运行时,以指示您希望在 Podman 引擎还是 Kubernetes 集群上运行 Pod。根据选择,您可以在 Pods 组件页面上看到在新创建的环境中运行的 Pod。

以下过程将创建一个在 Podman 引擎上运行的 Pod。

  1. 前往 Pods 页面。
  2. 点击 Pod 对应的溢出菜单图标。 overflow menu icon
  3. 从下拉列表中选择 Generate Kube (生成 Kube) 选项。
  4. Kube 选项卡中查看 Kubernetes YAML 配置。 kube manifest
  5. 复制配置并将其粘贴到您机器上的一个 YAML 文件中。
  6. 编辑 YAML 配置并保存。
  7. 前往 Pods 组件页面。
  8. 点击 Play Kubernetes YAML (运行 Kubernetes YAML)。 play kubernetes yaml
  9. 从您的机器中选择该 YAML 文件。
  10. 检查 Runtime (运行时) 字段是否设置为 Podman container engine (Podman 容器引擎)。
  11. 点击 Play (运行),然后点击 Done (完成)。
  12. 在同一页面上查看新创建的 Pod。

创建 Pod 后,设置一个本地 Kubernetes 集群来部署该 Pod。

设置本地 Kubernetes 集群

您可以设置一个本地 Kubernetes 集群。一旦集群连接并运行,您就可以在上面部署您的应用程序。

根据您的偏好,使用 Kind 或 Minikube 扩展

  1. 从扩展目录中安装扩展
  2. 创建一个 Kubernetes 集群。请参阅创建 Kind 集群创建 Minikube 集群

一旦创建了 Kubernetes 集群,您可以在 Kubernetes 组件页面上看到一个正在运行的控制平面节点和一个正在运行的 Kubernetes 服务。该页面还会显示集群已连接。

将应用程序部署到 Kubernetes

您可以将应用程序 Pod 部署到具有活动连接的 Kubernetes 集群,并通过服务访问它。此外,作为 Pod 一部分的任何容器都可以部署到 Kubernetes 集群。

  1. 选择您的 Kubernetes 上下文

  2. 前往 Pods 组件页面。

  3. 点击 Pod 对应的溢出菜单图标。 overflow menu icon

  4. 从下拉列表中选择 Deploy to Kubernetes 选项。

  5. 勾选复选框,使用入口控制器在本地暴露服务。 在本地暴露服务

    注意

    当您在运行镜像时配置自定义端口映射时,您可以从下拉列表中选择一个入口主机端口。 入口主机端口 否则,您将看不到该选项。

  6. 点击 Deploy,然后点击 Done

验证正在运行的服务

  1. 前往 Kubernetes 组件页面。

  2. 执行以下步骤

    1. 单击“服务”选项以查看新创建的服务 `my-pod-5000`。 服务已创建
    2. 单击“入口和路由”选项以查看新创建的入口 `my-pod`。 入口已创建
    注意

    使用 Apply YAML (应用 YAML) 按钮直接应用 Kubernetes YAML 文件来创建资源。

Podman Desktop 1.12 发布

·21 分钟阅读
Charlie Drage
软件工程师

Podman Desktop 1.12 发布! 🎉

podman-desktop-hero-1.12

Podman Desktop 1.12 现已发布。点击此处下载

此版本包含

  • Podman 远程:我们现在支持远程 Podman 设置!在 UI 中管理您的远程 Podman 虚拟机。
  • macOS GPU 支持:macOS 上的容器 GPU 访问现在可用。`libkrun` 现在是一个可选的提供程序类型,允许启用 GPU 直通。
  • Windows GPU 支持:也想尝试 Windows GPU 支持吗?Podman 已经支持它,但我们现在在我们的AI Lab 扩展中展示它
  • Podman 5.2.0:这个新版本的 Podman 为 macOS 提供了 GPU 访问权限,以及一系列新功能
  • 浅色模式脱离实验阶段:我们的浅色模式广受好评,我们现在已将其标记为非实验性功能!尽情享受新主题吧。
  • Kubernetes 功能:ConfigMap、Secret 和多文件 Kubernetes YAML 应用现已添加到我们的 Kubernetes 仪表盘中。
  • 改善字体一致性:您会注意到此版本在一致性方面有很大不同,因为我们更新了整个 Podman Desktop 的字体大小。

使用 RHEL 作为 WSL podman 机器

·阅读时间 6 分钟
Jeff Maury
工程经理

红帽提供了一个名为 Image Builder 的工具,允许开发人员以多种格式构建自己的 RHEL 自定义镜像。最近,Image Builder 将 WSL 添加为一个目标,使您可以在 Windows 上将 RHEL 作为 WSL 发行版运行。

这篇文章详细介绍了构建和运行 RHEL WSL 镜像所需的步骤和操作。

本文的目的是描述 RHEL WSL 发行版所需的选项,以便它可以作为 Podman machine 使用。

要将 RHEL WSL 镜像用作 Podman machine,请确保安装了以下软件包:

  • podman
  • podman-docker
  • procps-ng
  • openssh-server
  • net-tools
  • iproute
  • dhcp-client
  • sudo
  • systemd-networkd

幸运的是,除了最后一个软件包外,所有软件包都可从预配置的 RHEL 9 软件仓库中获得。最后一个软件包 (systemd-networkd) 可从 EPEL 9 软件仓库中获得,需要在构建镜像时进行配置。

构建镜像

导航至 image builder

image builder

在右上角菜单中,启用 Preview (预览) 模式。

image builder preview

点击 Add blueprint (添加蓝图) 以打开 Create image (创建镜像) 对话框向导。

image wizard

Image output (镜像输出) 页面,选择以下内容:

  • Release (发行版) 列表中,选择 Red Hat Enterprise Linux (RHEL) 9。
  • Select target environments (选择目标环境) 选项中,选择 WSL - Windows Subsystem for Linux (.tar.gz)
  • 点击 Next (下一步)。
警告

尽管 Release (发行版) 中提供了 RHEL 10 (Beta) 选项,但请注意它不兼容。在撰写本文时,WSL 内核不支持 nftables。

Register (注册) 页面,选择 Automatically register and enable advanced capabilities. (自动注册并启用高级功能)。

  • 从下拉菜单中,选择要用于镜像的激活密钥。请参阅创建激活密钥
  • 点击 Next (下一步)。

OpenSCAP 页面,由于 WSL 镜像不支持该功能,请点击 Next (下一步)。

File system configuration (文件系统配置) 页面,选择 Recommended: Use automatic partitioning (推荐:使用自动分区)。

  • 点击 Next (下一步)。

Content (内容) 页面,完成以下步骤以向您的镜像添加额外的软件包:

  • 在 Repository snapshot (软件仓库快照) 步骤中

    • 选择 Use latest content (使用最新内容)。
    • 点击 Next (下一步)。
  • 在 Custom repositories (自定义软件仓库) 步骤中

custom repositories

点击 Create and manage repositories here (在此创建和管理软件仓库) 链接。这将打开一个新标签页。

custom repositories

点击 Add repositories now (立即添加软件仓库)。

add custom repository

点击 Add repositories (添加软件仓库)。

add custom repository

Add custom repositories (添加自定义软件仓库) 页面,选择以下内容:

  • Name (名称) 列表中,输入 EPEL 9。
  • URL 字段中,输入 https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/
  • GPG key (GPG 密钥) 字段中,输入 https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9
  • 点击 Save (保存)。

关闭该标签页并切换回前一个。

  • 在筛选输入字段中,键入 EPEL。
  • 选择 EPEL 9 软件仓库。

custom repository created

点击 Next (下一步)。

  • 在 Additional packages (附加软件包) 步骤中
    • Available packages (可用软件包) 搜索字段中,输入 podman 并点击 按钮。
    • 选择 podman 和 podman-docker 软件包。
    • Available packages (可用软件包) 搜索字段中,输入 procps-ng 并点击 按钮。
    • 选择 procps-ng 软件包。
    • Available packages (可用软件包) 搜索字段中,输入 openssh-server 并点击 按钮。
    • 选择 openssh-server 软件包。
    • Available packages (可用软件包) 搜索字段中,输入 net-tools 并点击 按钮。
    • 选择 net-tools 软件包。
    • Available packages (可用软件包) 搜索字段中,输入 iproute 并点击 按钮。
    • 选择 iproute 软件包。
    • Available packages (可用软件包) 搜索字段中,输入 dhcp-client 并点击 按钮。
    • 选择 dhcp-client 软件包。
    • Available packages (可用软件包) 搜索字段中,输入 sudo 并点击 按钮。
    • 选择 sudo 软件包,然后点击 > 按钮,将软件包搜索结果中显示的已选软件包添加到 Chosen packages (已选软件包) 双列表框中。
    • Available packages (可用软件包) 搜索字段中,输入 systemd 并点击 按钮。
    • 选择 systemd-networkd 软件包。
    • 点击 Next (下一步)。

First boot script configuration (首次启动脚本配置) 页面

  • 点击 Next (下一步)。

Details (详情) 页面

  • Blueprint name (蓝图名称) 中,输入 rhel-wsl。
  • 点击 Next (下一步)。

Review (审查) 页面

  • 点击 Create blueprint and build image (创建蓝图并构建镜像)。

images list

镜像正在构建中。构建完成后,下载链接将可用。点击 Download (.tar.gz) (下载 .tar.gz) 链接并将下载的文件保存到您的本地文件夹之一。

创建 RHEL WSL podman machine

启动 Podman Desktop 并转到 Settings -> Resources (设置 -> 资源) 页面。

images list

在 Podman provider 上,点击 Create new ... (新建...)。

Create Podman machine (创建 Podman machine) 页面,点击 Image Path (镜像路径) 字段的 Browse (浏览) 按钮,并选择从 Image Builder 下载的文件。

create podman machine

点击 Create (创建) 按钮:machine 将被创建并启动。稍后,应会报告操作状态。

podman machine created

来体验一下 RHEL WSL podman machine

转到 Images (镜像) 页面并拉取 httpd 镜像。

pull httpd image

点击 Done (完成)。

images list

通过点击 Run image (运行镜像) 图标来启动镜像。

images list

一旦容器启动,就可以在 localhost:9000 访问 Apache 服务器。

Podman Desktop 1.11 发布

·8 分钟阅读
Charlie Drage
软件工程师

Podman Desktop 1.11 版本发布!🎉

Podman-desktop-1-11-hero

此版本引入了

  • 实验性浅色模式!:我们收到最多请求的功能来了!快来设置中试试我们全新的实验性浅色模式吧。
  • 对 Apple Silicon 的 Rosetta 支持:构建 AMD64 二进制文件的速度几乎与 ARM64 二进制文件相同。
  • Kubernetes 改进:快来看看我们为 Kubernetes 新增的节点和存储卷页面。
  • 改进的 UI:除了浅色模式,您还会注意到我们容器列表页面的更新。
  • 增强的清单支持:现在,构建为清单的镜像会被分组在一起。

Podman Desktop 1.11 现已发布。点击此处下载

Podman Desktop 1.10 发布

·阅读时间 6 分钟
Tim deBoer
架构师

Podman Desktop 1.10 发布! 🎉

Podman-desktop-1-10-hero

此版本引入了

  • 100 万次下载!:哇,我们做到了!
  • 扩展目录:重新设计的扩展页面和目录,让您充分利用 Podman Desktop。
  • Podman 5:现在向所有用户推荐 Podman 5.0.2
  • 多平台构建:一次性为多个平台构建。
  • 扩展 API 改进:对 🦭 Podman Desktop 扩展使用的扩展 API 进行了额外更新。

Podman Desktop 1.10 现已发布。点击此处下载

Podman Desktop 1.9 发布

·10 分钟阅读
Florent Benoit
首席软件工程师

Podman Desktop 1.9 版本发布!🎉

Podman-desktop-1-9-hero

此版本引入了:🦭 一点创新、一股兴奋浪潮和一片充满可能性的海洋!

  • Podman 5! 新用户可使用 Podman 5.0.1(对于 4.x 用户,此为实验性升级)。
  • Podman 4.9.4Podman 4.9.4 现已包含在 Windows 和 macOS 安装程序中。
  • 备份/恢复镜像:将镜像或容器保存到 tar 归档文件并恢复它们。
  • Kubernetes Pod 终端:连接到 Kubernetes Pod 内的终端。
  • 扩展 API 改进:对 🦭 Podman Desktop 扩展使用的扩展 API 进行了额外更新。

Podman Desktop 1.9 现已可用。点击此处下载

Podman Desktop 荣获 2024 DEVIES 奖

·2 分钟阅读
Cedric Clyburn
开发者大使

我们很荣幸地宣布,Podman Desktop 荣获负盛名的 2024 DEVIES Award“容器与 Kubernetes”类别奖。此奖项是对 Podman Desktop 团队和更广泛的开源社区帮助开发者的努力的肯定。Podman Desktop 提高了开发者容器工作流程的效率,并提供了从容器到 Kubernetes(领先的开源容器编排平台)的轻松应用程序过渡。

“虽然 Podman Desktop 去年才全面上市,但社区反响令人印象深刻且令人非常欣慰。我们非常自豪能够获得这一杰出认可,它表彰了塑造容器开发未来的热情、承诺和创新,并得到了 Red Hat 支持的充满活力的开源标准的 backing。”Podman Desktop 团队产品经理Stévan Le Meur表示。

hero

什么是 DEVIES 奖?

DEVIES 奖由 DeveloperWeek 颁发,旨在表彰软件开发社区中最具创新性和影响力的工具、平台和技术。Podman Desktop 荣获“容器与 Kubernetes 最佳创新奖”,凸显了它对行业的重要影响以及在彻底改变开发者构建、发布和运行应用程序方式方面的作用。DEVIES 奖获奖者由数百名提名者中由独立的、行业领先的 DevNetwork 咨询委员会选出。

与我们一同庆祝!

我们很高兴能在 2024 年 2 月 21-23 日在加利福尼亚州奥克兰(以及 2024 年 2 月 27-29 日在线)举行的 DeveloperWeek 2024 大会上领奖。此外,Red Hat 开发者倡导者Cedric Clyburn将发表关于 Podman Desktop 的演讲,题为“从容器到 Pods 再到 Kubernetes——为您的开发者环境提供帮助!”,其中将全面介绍Podman、演示 Podman Desktop 体验,以及一个从容器到 Pods 再到 Kubernetes 的多层应用程序!

最后,如果没有包括并承认这个奖项是由整个 Podman Desktop 社区的贡献者赢得的,那将是极不合适的!我们还要感谢 DevNetwork 咨询委员会和 DeveloperWeek 颁发此殊荣,并提供机会与更广大的开发者社区分享 Podman Desktop 的创新。

与 Kubernetes 集群共享您的本地 podman 镜像

·9 分钟阅读
Florent Benoit
首席软件工程师

作为开发者,我们不断改进和完善我们的应用程序。我们面临的挑战之一是在使用容器镜像和 Kubernetes 部署/Pod 时快速迭代。

例如,当我们在 Kubernetes pod 中尝试一个新镜像时,该镜像需要在一个私有/公共注册表上可用,或者在 Kubernetes 集群的节点上可用。有时我们需要调用额外的命令,例如 `kind load docker-image` 或 `minikube cache add `,或者首先将镜像发布到第三方注册表。

您会同意,在 Kubernetes Pod 中尝试新镜像应该像构建镜像本身一样无缝。

在这篇博文中,我们将探讨使用 Podman Desktop 简化 Kubernetes 中镜像迭代过程的最佳实践。

hero