跳至主要内容

Docker 用户需要了解的关于 Podman Desktop 的 5 件事

·阅读时长 5 分钟
Florent Benoit
首席软件工程师

使用 Podman Desktop 时,Docker 用户需要了解的 5 件事

  • **使用单一 UI**:Podman Desktop 与多个容器引擎配合使用,包括 Docker。
  • **兼容性模式**:如何确保工具使用 Podman 而不是 Docker。
  • **Compose** 支持:如何使用 Compose 文件和 Podman。
  • **Kubernetes** 支持:如何使用 Kubernetes 和 Podman。
  • **安全**:使用 `rootless` 模式或无根权限容器。

5-things-to-know-for-a-docker-user-hero


使用 Podman Desktop 与在 Docker 中运行的容器交互

Docker Desktop 提供了一个 UI 来与容器和映像进行交互。但是 UI 依赖于 Docker API,并且无法同时使用 Docker 和 Podman 的 UI。

Podman Desktop 是一款多引擎 UI 工具。UI 与 Docker 和 Podman 的 API 兼容。这意味着所有引擎的所有容器和映像都同时显示在 UI 中。

从 Docker 迁移到 Podman 时,您可以使用 Podman Desktop 与在 Docker 中运行的容器进行交互。探索 Podman Desktop 的所有命令和功能,并查看 Docker 的所有资源。

Many container engines at the same time

Docker 兼容性模式

使用 Podman Desktop 或 Podman CLI 使用 Podman 很简单。但一些工具希望找到 `docker` CLI 或 `docker.sock` 套接字。在这种情况下,您必须使用 Podman 的兼容性模式。

套接字文件兼容性

套接字兼容性模式是 Podman 的一项功能,它允许将 Podman 套接字绑定到 Docker 套接字路径下。

在 Windows 上,套接字兼容性模式始终默认启用。在 macOS 上,使用 `.pkg 安装程序`,它默认处于活动状态。但是,当使用 `brew` 安装时,它将不存在,因为它需要一些管理员权限。

这不是问题,因为您可以通过调用 CLI 工具来启用它,该工具将设置兼容性模式。

例如,如果您在 Java 项目中使用`Testcontainers`,您可以使用兼容性模式来确保该工具使用 Podman 而不是 Docker。

CLI 兼容性

如果您有依赖于 `docker` CLI 的脚本,可以使用兼容性模式来确保该工具使用 Podman 而不是 Docker。

如果您的计算机上安装了 `docker` CLI,可以使用 docker 的套接字文件兼容性来确保该工具使用 Podman 引擎而不是 Docker。

如果您的计算机上没有安装 `docker` CLI,则可以创建名为 `docker` 的脚本,它将调用 `podman` CLI

**注意:** 创建 shell 提示符别名,例如 `alias docker=podman`,在您调用的脚本中将不起作用。

Compose

作为 Docker 用户,您可能会使用 `docker compose`(或 `docker-compose`)来运行一些应用程序。

目前 Podman 并未在 CLI 中直接包含 `Compose` 支持,没有 `podman compose` 命令。

`Compose` 可以与 Podman 套接字一起使用。

基于兼容性模式(参见关于 Docker 兼容性模式的部分

现在您可以使用 `compose` 二进制文件运行您的应用程序,它将使用 Podman 引擎。

Podman Desktop 具有一个 `compose` 扩展,如果文件系统上还没有,它可以获取 `compose` 二进制文件。

Podman Desktop UI 显示 `Compose` 创建的容器在同一组中。

Compose support in the UI

Kubernetes

可以使用 Docker 启动 Kubernetes 集群。

Podman 直接支持 Kubernetes 资源的子集,您可以将这些资源与 `.yaml` 文件一起使用。

例如,如果您只想创建一个 `Pod` 资源,可以使用 `容器` 列表屏幕中的 `播放 Kubernetes YAML` 按钮以及您的 `.yaml` 文件。无需安装或启动 Kubernetes 集群。

Play Kubernetes YAML

可以进行反向操作。将容器或 Pod 的定义导出到 Kubernetes 资源。您可以使用给定容器或 Pod 的 kebab 菜单中的 `生成 kube` 按钮。

Kubernetes generate

Podman 处理 Pod,在 Podman Desktop UI 中,您可以在 Pod 部分看到所有 Pod。Pod 中的所有容器都在同一组中。

Pods in the UI

Containers from pod

一个实验性的 `kind` 扩展正在使用 Podman 引入完整的 Kubernetes 集群的创建。

无根模式

Docker 和 Podman 之间的区别之一是它们处理容器的方式。Docker 默认情况下需要 root 权限才能运行容器。Podman 默认情况下可以在没有 root 权限的情况下运行容器。

这意味着例如,使用端口 < 1024 启动容器将不起作用。您需要使用端口 > 1024。

如果您仍然需要使用端口 < 1024 创建容器,则可以更改 Podman 机器配置(如果您在 Windows 或 macOS 上)。

命令是 `podman machine set --rootful` 以启用具有 root 权限的执行,或者 `podman machine set --rootful=false` 以切换回无根模式。