Podman 教程

Podman Pod 创建

在 Podman 中,可以通过 podman pod create 命令在 Podman 中创建一个新的空 Pod。Pod 是共享网络、存储等资源的容器集合,创建后会生成一个唯一的 Pod ID,Pod 初始状态为 created(已创建但未启动),需要通过 podman pod start 命令启动。

基本语法

podman pod create 命令语法如下:

podman pod create [OPTIONS] [NAME]

参数说明:

  • OPTIONS:配置 Pod 的参数(如端口映射、资源限制、网络设置等)

  • NAME:可选,为 Pod 指定自定义名称(便于识别,若不指定则自动生成)

关键参数:

  • -n, --name    为 Pod 分配名称,例如:--name my-web-pod

  • -l, --label   设置 Pod 元数据标签(键值对),例如:--label app=web,env=prod

  • --pod-id-file    将 Pod ID 写入指定文件,例如:--pod-id-file /tmp/pod.id

  • -p, --publish    端口映射(主机端口:Pod 端口),例如:--publish 8080:80,6379:6379

  • --network    指定 Pod 连接的网络,例如:--network bridge

  • --ip    为 Pod 分配静态 IPv4 地址,例如:--ip 192.168.1.100

  • -h, --hostname    设置 Pod 的主机名,例如:--hostname web-pod

  • --add-host    添加主机 - IP 映射(写入 /etc/hosts),例如:--add-host db:192.168.1.200

  • -m, --memory    设置内存限制,例如:--memory 1g(限制 1GB 内存)

  • --cpus    设置 CPU 核心数限制,例如:--cpus 2(限制使用 2 核 CPU)

  • --cpu-shares    设置 CPU 相对权重(共享资源时优先级),例如:--cpu-shares 512

  • --blkio-weight    设置块 IO 权重,例如:--blkio-weight 500

  • -v, --volume    挂载卷到 Pod(所有容器共享),例如:--volume /host/data:/pod/data:rw

  • --shm-size    设置 /dev/shm 临时存储大小,例如:--shm-size 256m

  • --share    指定 Pod 共享的内核命名空间(默认 ipc,net,uts),例如:--share ipc,net,pid,uts

  • --pid    设置 PID 命名空间模式,例如:--pid host(共享主机 PID 命名空间)

  • --infra    是否创建 infra 容器(默认 true,用于共享命名空间),例如:--infra=false(不创建 infra 容器)

  • --restart    设置 Pod 重启策略,例如:--restart always(总是重启,取值 always、no、never、on-failure、unless-stopped)

  • --replace    若同名 Pod 存在则替换,例如:--replace

  • --exit-policy    最后一个容器退出时 Pod 的行为,例如:--exit-policy stop(Pod 随最后一个容器停止)

    • continue 默认值,即使 Pod 中所有业务容器都已退出,Pod 仍会继续存在(infra 容器保持运行),Pod 状态维持为 Running。

    • stop 当最后一个业务容器退出时,Pod 会被停止(infra 容器也会停止),Pod 状态变为 Exited。

    • remove 当最后一个业务容器退出时,Pod 会被自动删除(包括所有关联资源)。

点击查看 podman pod create 命令手册

列出所有 Pod

podman pod ls(别名 podman pod ps/podman pod list)用于列出系统中所有 Pod 的信息,包括 Pod 的 ID、名称、状态、创建时间、包含的容器数量等。默认情况下,该命令会显示所有状态的 Pod(包括 created、running、exited 等)。

简单示例:

C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
0c9858859aa8  web-redis-pod  Running     About an hour ago  a00c13fb2b32  3

输出字段说明:

  • POD ID:Pod 的唯一标识符(默认截断显示)

  • NAME:Pod 的名称(若未指定则自动生成)

  • STATUS:Pod 的状态(running/created/exited 等)

  • CREATED:Pod 的创建时间

  • INFRA ID:Infra 容器的 ID

  • # OF CONTAINERS:Pod 内包含的容器数量(包括 Infra 容器)

常用选项如下:

  • -q, --quiet    仅输出 Pod 的 ID(适合脚本批量处理),例如:podman pod ls -q

  • -f, --filter    按条件筛选 Pod(如状态、名称等),例如:podman pod ls -f status=running

  • --noheading   不显示表头(纯数据输出),例如:podman pod ls --noheading

  • --no-trunc    不截断 Pod / 容器 ID,显示完整字符串,例如:podman pod ls --no-trunc

  • --ctr-ids    显示 Pod 内所有容器的 ID,例如:podman pod ls --ctr-ids

  • --ctr-names    显示 Pod 内所有容器的名称,例如:podman pod ls --ctr-names

  • --ctr-status    显示 Pod 内所有容器的状态,例如:podman pod ls --ctr-status

  • --ns    显示 Pod 的命名空间信息(如网络、PID 命名空间),例如:podman pod ls --ns

  • --format    自定义输出格式(支持 JSON 或 Go 模板),例如:podman pod ls --format json,podman pod ls --format "{{.ID}}\t{{.Name}}"

  • --sort    按指定字段排序(默认按创建时间),例如:podman pod ls --sort name(按名称排序),podman pod ls --sort status(按状态排序)

点击查看 podman pod ls 命令手册

简单示例:

# 列出系统中所有Pod的基本信息(默认格式,包含ID、名称、状态等核心字段)
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
0c9858859aa8  web-redis-pod  Running     About an hour ago  a00c13fb2b32  3

# 筛选出状态为“运行中”的Pod(仅显示Running状态的Pod)
C:\Users\Administrator> podman pod ls -f status=running
POD ID        NAME           STATUS      CREATED            INFRA ID      # OF CONTAINERS
0c9858859aa8  web-redis-pod  Running     About an hour ago  a00c13fb2b32  3

# 列出Pod信息但不显示表头(纯数据输出,适合脚本处理)
C:\Users\Administrator> podman pod ls --noheading
0c9858859aa8  web-redis-pod  Running     About an hour ago  a00c13fb2b32  3

# 显示完整的Pod ID和Infra ID(不截断长ID,便于精确识别)
C:\Users\Administrator> podman pod ls --no-trunc
POD ID                                                            NAME           STATUS      CREATED            INFRA ID                                                          # OF CONTAINERS
0c9858859aa8e97fefa2b4839cc1c0f4c589ed40aca1840cbfd66b8f49eae31e  web-redis-pod  Running     About an hour ago  a00c13fb2b32bc1c07e7f3e277e09b6dcd8ba5a1dda62fc8f6a7e9a3c241cb37  3

# 显示Pod内所有容器的ID(便于查看Pod关联的容器标识)
C:\Users\Administrator> podman pod ls --ctr-ids
POD ID        NAME           STATUS      CREATED            INFRA ID      IDS
0c9858859aa8  web-redis-pod  Running     About an hour ago  a00c13fb2b32  a00c13fb2b32,059b42d1d4c2,0f9dce4e088a

# 显示Pod内所有容器的名称(直观识别容器角色,如infra、redis、nginx)
C:\Users\Administrator> podman pod ls --ctr-names
POD ID        NAME           STATUS      CREATED            INFRA ID      NAMES
0c9858859aa8  web-redis-pod  Running     About an hour ago  a00c13fb2b32  0c9858859aa8-infra,redis,nginx

# 显示Pod内所有容器的状态(检查容器是否均正常运行)
C:\Users\Administrator> podman pod ls --ctr-status
POD ID        NAME           STATUS      CREATED            INFRA ID      STATUS
0c9858859aa8  web-redis-pod  Running     About an hour ago  a00c13fb2b32  running,running,running

# 显示Pod的命名空间和cgroup信息(用于排查资源隔离、命名空间共享问题)
C:\Users\Administrator> podman pod ls --ns
POD ID        NAME           STATUS      CREATED            INFRA ID      CGROUP          NAMESPACES  # OF CONTAINERS
0c9858859aa8  web-redis-pod  Running     About an hour ago  a00c13fb2b32  /libpod_parent              3

# 以JSON格式输出Pod的完整信息(便于程序解析,包含容器详情、创建时间等)
C:\Users\Administrator> podman pod ls --format json
[
  {
    "Cgroup": "/libpod_parent",
    "Containers": [
      {
        "Id": "a00c13fb2b32bc1c07e7f3e277e09b6dcd8ba5a1dda62fc8f6a7e9a3c241cb37",
        "Names": "0c9858859aa8-infra",
        "Status": "running",
        "RestartCount": 0
      },
      {
        "Id": "059b42d1d4c26c71753cc396a828a55c4c7e3820ec8971d0dbc97ea2d67dacc4",
        "Names": "redis",
        "Status": "running",
        "RestartCount": 0
      },
      {
        "Id": "0f9dce4e088a7060b3afcda1893ada8d894e987535126ad3937b5438c3c04535",
        "Names": "nginx",
        "Status": "running",
        "RestartCount": 0
      }
    ],
    "Created": "2025-11-25T16:26:00.105431602+08:00",
    "Id": "0c9858859aa8e97fefa2b4839cc1c0f4c589ed40aca1840cbfd66b8f49eae31e",
    "InfraId": "a00c13fb2b32bc1c07e7f3e277e09b6dcd8ba5a1dda62fc8f6a7e9a3c241cb37",
    "Name": "web-redis-pod",
    "Namespace": "",
    "Networks": [],
    "Status": "Running",
    "Labels": {

    }
  }
]

# 自定义输出格式,仅显示Pod ID和名称(按需提取关键信息)
C:\Users\Administrator> podman pod ls --format "{{.ID}}\t{{.Name}}"
0c9858859aa8    web-redis-pod

# 按Pod名称排序输出(便于按名称整理Pod列表)
C:\Users\Administrator> podman pod ls --sort name
POD ID        NAME           STATUS      CREATED      INFRA ID      # OF CONTAINERS
0c9858859aa8  web-redis-pod  Running     2 hours ago  a00c13fb2b32  3

# 按Pod状态排序输出(便于按运行状态归类Pod)
C:\Users\Administrator> podman pod ls --sort status
POD ID        NAME           STATUS      CREATED      INFRA ID      # OF CONTAINERS
0c9858859aa8  web-redis-pod  Running     2 hours ago  a00c13fb2b32  3

  

简单示例

创建基础 Pod(带名称和端口映射)

在 Podman 中创建一个名为 my-app-pod 的 Pod,并为其配置端口映射规则,分别映射为 8080:80、3306:3306。如下:

podman pod create \
  --name my-app-pod \
  --publish 8080:80 \
  --publish 3306:3306

命令解释:

  • podman pod create    这是创建 Pod 的基础命令。

  • --name my-app-pod    为创建的 Pod 指定一个名称 my-app-pod,方便后续管理(如启动、停止、删除)。

  • --publish 8080:80   将宿主机的 8080 端口映射到 Pod 内部的 80 端口。外部用户访问宿主机的 8080 端口时,请求会被转发到 Pod 内运行的容器的 80 端口。

  • --publish 3306:3306    将宿主机的 3306 端口映射到 Pod 内部的 3306 端口(通常用于 MySQL 数据库服务)。

示例:

# 创建名为 my-app-pod 的 Pod
C:\Users\Administrator> podman pod create --name my-app-pod --publish 8080:80 --publish 3306:3306
374e9c88dafe376ce5e47099dad835fab51f371bdc5139886b85c3b4766de9bb

# 查看 Pod 列表
C:\Users\Administrator> podman pod ls
POD ID        NAME           STATUS      CREATED        INFRA ID      # OF CONTAINERS
374e9c88dafe  my-app-pod     Created     4 seconds ago  914eb0c35d15  1
0c9858859aa8  web-redis-pod  Exited      17 hours ago   a00c13fb2b32  3

创建带资源限制和卷的 Pod

创建了一个名为 resource-limited-pod 的 Pod,并为其配置了严格的资源限制和特定的存储卷挂载规则。这是在生产环境中部署应用时常用的配置,用于确保 Pod 不会过度占用主机资源,并实现数据持久化。例如:

podman pod create \
  --name resource-limited-pod \
  --memory 2g \
  --cpus 4 \
  --volume /host/config:/pod/config:ro \
  --volume /host/logs:/pod/logs:rw

命令解释:

  • podman pod create    创建 Pod 的基础命令。

  • --name resource-limited-pod   为 Pod 指定名称 resource-limited-pod。

  • --memory 2g    设置 Pod 的内存上限为 2GB。Pod 内所有容器共享这部分内存,总使用量不能超过此限制,否则可能会被系统 OOM killer 终止。

  • --cpus 4    限制 Pod 可以使用的 CPU 核心数为 4 个。这可以是整数(如 4)或小数(如 2.5),表示 Pod 最多能使用的 CPU 资源比例。

  • --volume /host/config:/pod/config:ro:

    • 将宿主机的 /host/config 目录挂载到 Pod 内的 /pod/config 目录。

    • ro 表示 只读(read-only)模式,Pod 内的容器只能读取该目录的内容,无法修改。适用于配置文件等不需要写入的数据。

  • --volume /host/logs:/pod/logs:rw:

    • 将宿主机的 /host/logs 目录挂载到 Pod 内的 /pod/logs 目录。

    • rw 表示 读写(read-write)模式,Pod 内的容器可以读取和写入该目录。适用于日志存储等需要持久化的数据。

示例:

# 创建名为 resource-limited-pod 的 Pod
# 限制内存为2GB,CPU为4核
C:\Users\Administrator> podman pod create --name resource-limited-pod --memory 2g --cpus 4 --volume /tmp/data/config:/pod/config:ro --volume /tmp/data/logs:/pod/logs:rw
800c46e0d4bb0e2e1f3687ee391a71786ab49a7ee967230073478a776a417b78

# 查看 Pod 列表
C:\Users\Administrator> podman pod ls
POD ID        NAME                  STATUS      CREATED        INFRA ID      # OF CONTAINERS
800c46e0d4bb  resource-limited-pod  Created     5 seconds ago  80169b948720  1
374e9c88dafe  my-app-pod            Created     5 minutes ago  914eb0c35d15  1
0c9858859aa8  web-redis-pod         Exited      17 hours ago   a00c13fb2b32  3

创建自定义网络和静态 IP 的 Pod

下面命令实现了一个完整的 Pod 网络自定义配置流程:首先创建一个独立的自定义网络,然后将新建的 Pod 加入该网络,并为其分配静态 IP 地址和主机名。这种配置方式可以让 Pod 拥有固定的网络标识,便于服务发现和网络管理。例如:

(1)创建自定义网络

# 先创建自定义网络
podman network create my-network

命令解释:

  • podman network create    Podman 创建自定义网络的基础命令。

  • my-network    自定义网络的名称。创建后,Podman 会在宿主机上生成一个独立的网络命名空间,通常使用 bridge 驱动,提供内部的 DNS 解析和隔离的网络环境。

(2)创建 Pod 并指定网络和 IP

# 创建 Pod 并指定网络和 IP
podman pod create \
  --name custom-net-pod \
  --network my-network \
  --ip 10.88.0.10 \
  --hostname pod-10

命令解释:

  • --name custom-net-pod    为 Pod 指定名称 custom-net-pod。

  • --network my-network    将 Pod 加入刚刚创建的 my-network 自定义网络,而非默认的 podman 网络。

  • --ip 10.88.0.10    为 Pod 在 my-network 网络中分配一个静态 IP 地址。这确保 Pod 每次启动都使用相同的 IP,便于其他服务稳定访问。

  • --hostname pod-10    设置 Pod 的主机名为 pod-10。同一自定义网络内的其他容器 / Pod 可以通过这个主机名直接解析到该 Pod 的 IP。

示例:

# 创建自定义网络
C:\Users\Administrator> podman network create my-network
my-network

# 查看自定义网络的IP信息
C:\Users\Administrator> podman network inspect my-network
[
     {
          "name": "my-network",
          "id": "cab427dea9755671133a11cdd47273d9c0b9ef2fc748a3c943eb892b93894db9",
          "driver": "bridge",
          "network_interface": "podman4",
          "created": "2025-11-26T09:59:53.687032594+08:00",
          "subnets": [
               {
                    "subnet": "10.89.2.0/24",
                    "gateway": "10.89.2.1"
               }
          ],
          "ipv6_enabled": false,
          "internal": false,
          "dns_enabled": true,
          "ipam_options": {
               "driver": "host-local"
          },
          "containers": {}
     }
]

# 创建一个名为 custom-net-pod 的 Pod
C:\Users\Administrator> podman pod create --name custom-net-pod --network my-network --ip 10.89.2.10 --hostname pod-10
2034e27356c2edf961be67365c351be270877641adcfe8077c41f3935a335513

# 列出 Pod 列表
C:\Users\Administrator> podman pod ls
POD ID        NAME                  STATUS      CREATED         INFRA ID      # OF CONTAINERS
2034e27356c2  custom-net-pod        Created     4 seconds ago   53250a7299b0  1
800c46e0d4bb  resource-limited-pod  Created     13 minutes ago  80169b948720  1
374e9c88dafe  my-app-pod            Created     19 minutes ago  914eb0c35d15  1
0c9858859aa8  web-redis-pod         Exited      18 hours ago    a00c13fb2b32  3

上面简单介绍了如何创建 Pod,以及查看 Pod 的状态,更多 Pod 知识阅读后续章节。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号