注意:下面操作将在 Windows11 上面安装 Podman 最新版本 5.7.0-rc2 进行操作。
Podman 是一个无守护进程的容器引擎,与 Docker 命令兼容,非常适合容器化应用的开发和运行。以下是 Podman 的快速入门指南:
运行 podman 命令查看版本信息,确认 Podman 是否已经正确安装,如下:
C:\Users\hxstr> podman --version podman version 5.7.0-rc2
如果你能看见 podman 的版本信息,则说明你已经成功安装 Podman。
Podman 中的镜像是打包了应用程序及其依赖、运行环境、配置文件的只读模板,是创建容器的基础。
镜像的核心特性如下:
只读属性:镜像创建后不可修改,容器运行时会在镜像之上生成可写层来存储临时数据。
分层结构:由多个只读层叠加而成,相同层可被多个镜像共享,大幅节省存储空间。
可移植性:包含运行应用所需的全部依赖,能在任何支持 Podman 的环境中一致运行,解决“环境不一致” 问题。
镜像与容器的关系:镜像相当于“软件安装包”,容器则是“安装后的运行实例”。一个镜像可以创建多个独立的容器,容器停止或删除后,镜像本身不会受影响。

Podman 中的容器是基于镜像创建的可运行实例,是镜像的 “动态运行形态”,用于实际执行应用程序。
容器是镜像的 “运行时载体”,镜像相当于静态模板,容器则是模板实例化后的动态进程。它通过 namespace、cgroups 等 Linux 内核技术实现资源隔离(如网络、进程、文件系统)和资源限制(如 CPU、内存),拥有独立的运行环境但共享宿主机内核。
容器的关键特性:
可写性:容器在镜像的只读层之上,会自动创建一层可写容器层,所有运行时的修改(如创建文件、修改配置)都仅保存在这一层,不影响原始镜像。
生命周期可控:支持创建、启动、停止、重启、删除等操作,生命周期独立于镜像和其他容器。
轻量级:无需额外的操作系统内核,仅占用应用运行所需的资源,启动速度快、资源开销低。
容器与镜像的核心区别:
维度 | 镜像(Image) | 容器(Container) |
状态 | 静态、只读 | 动态、可写(仅容器层) |
作用 | 作为创建容器的模板 | 运行应用程序的实际载体 |
生命周期 | 创建后长期存在(除非主动删除) | 随启动而存在,删除后数据丢失(除非挂载存储卷) |
Podman 的仓库(Registry)是存储、分发容器镜像的远程或本地服务,相当于镜像的 “仓库 / 中转站”,用于集中管理和共享镜像资源。
仓库的核心作用:
存储镜像:提供镜像的长期存储服务,支持不同版本、不同架构的镜像分类存储。
分发镜像:用户可通过仓库拉取(pull)所需镜像到本地,也可将本地构建的镜像推送(push)到仓库供他人使用。
版本管理:支持镜像标签(Tag)管理,同一镜像可通过不同标签区分版本(如 nginx:1.21、nginx:latest)。
仓库的常见类型:
公共仓库:面向所有用户开放,最常用的是 Docker Hub(Podman 可直接兼容使用),还有 Red Hat Quay、阿里云容器镜像服务等。
私有仓库:仅对特定用户或团队开放,用于存储内部项目镜像,保障镜像的安全性和私密性(可自行搭建或使用云厂商提供的私有仓库服务)。
本地仓库:搭建在本地环境的仓库,用于局域网内快速分发镜像,避免依赖外网。
仓库与镜像、容器的关联:
仓库是镜像的“存储载体”,镜像需通过仓库实现跨环境传输。
容器的创建依赖本地镜像,而本地镜像要么来自仓库拉取,要么是本地构建后推送至仓库再拉取使用。
拉取镜像(Pull)是指从远程或本地仓库下载镜像到本地环境的操作,是使用镜像创建容器的前提(若本地已存在目标镜像,则无需重复拉取)。语法如下:
podman pull <镜像名:标签>
示例:拉取 Ubuntu 版本为 22.04 的镜像
C:\Users\hxstr> podman pull ubuntu:22.04 Resolving "ubuntu" using unqualified-search registries (/home/user/.config/containers/registries.conf) Trying to pull docker.io/library/ubuntu:22.04... Getting image source signatures Copying blob sha256:af6eca94c8104c8e90d3f9efe59c2b3a02b20aad3d985e31c7cd009ea104c447 Copying config sha256:392fa14dddd09da29a5c3d26948ff81c494424035b755d01b84ab12d92127433 Writing manifest to image destination 392fa14dddd09da29a5c3d26948ff81c494424035b755d01b84ab12d92127433
从仓库拉取最新版本的 nginx 镜像到本地:
C:\Users\hxstr> podman pull nginx Resolving "nginx" using unqualified-search registries (/home/user/.config/containers/registries.conf) Trying to pull docker.io/library/nginx:latest... Getting image source signatures Copying blob sha256:52bc359bcbd74bb3d11b94cf3c6d94bcf9bd2d3e450483fb978124ceddb9ca57 Copying blob sha256:266626526d42cf7fe5f56b933db3f4c59c0596b7e2c3a556ba5ec4981daf3e9d Copying blob sha256:d7ecded7702a5dbf6d0f79a71edc34b534d08f3051980e2c948fba72db3197fc Copying blob sha256:d921c57c6a81addac6ca451906699ca6ee8c01fd708805a928181c5370b0a30c Copying blob sha256:320b0949be89766f7c6a8746f1971021a8e8c84928af00454c0f9c6e38ebf54c Copying blob sha256:9def903993e4ef9a3faa02bb893b0382768a4d466d51247bff1ea80b119377a1 Copying blob sha256:e2f8e296d9df1dd5e2ddc81e5e758f9762fdb932e982ac6873e36692c3e3c983 Copying config sha256:d261fd19cb63238535ab80d4e1be1d9e7f6c8b5a28a820188968dd3e6f06072d Writing manifest to image destination d261fd19cb63238535ab80d4e1be1d9e7f6c8b5a28a820188968dd3e6f06072d
更多命令信息将在后续介绍。
在 Podman 中,查看本地镜像的核心命令是 podman images 或其等效命令 podman image ls,用于列出本地存储的所有镜像信息,方便用户了解当前可用的镜像资源。例如:
C:\Users\hxstr> podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest d261fd19cb63 4 days ago 155 MB docker.io/library/redis latest 017b1c12abf9 4 days ago 140 MB docker.io/library/tomcat latest f29228ec2c11 3 weeks ago 417 MB docker.io/library/ubuntu 22.04 392fa14dddd0 5 weeks ago 80.4 MB C:\Users\hxstr> podman image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest d261fd19cb63 4 days ago 155 MB docker.io/library/redis latest 017b1c12abf9 4 days ago 140 MB docker.io/library/tomcat latest f29228ec2c11 3 weeks ago 417 MB docker.io/library/ubuntu 22.04 392fa14dddd0 5 weeks ago 80.4 MB
更多命令信息将在后续介绍。
在 Podman 中,删除本地镜像的核心命令是 podman rmi(全称为 podman image rm),用于移除本地存储中不再需要的镜像,释放磁盘空间。删除镜像前需注意:若镜像已被容器使用(包括停止的容器),需先删除关联容器,否则会删除失败。语法如下:
podman rmi <镜像ID或名称>
如果要强制删除(即使有容器依赖也删除),语法如下:
podman rmi -f <镜像>
例如:
C:\Users\hxstr> podman rmi d261fd19cb63 Untagged: docker.io/library/nginx:latest Deleted: d261fd19cb63238535ab80d4e1be1d9e7f6c8b5a28a820188968dd3e6f06072d C:\Users\hxstr> podman rmi redis Untagged: docker.io/library/redis:latest Deleted: 017b1c12abf9d52fe40dda80a195107ea2c566a0035b59ffcc67af8b4c32c736
更多命令信息将在后续介绍。
在 Podman 中,运行容器(从镜像创建并启动)的核心命令是 podman run,该命令会基于指定镜像创建一个新容器,并立即启动它。基本命令格式:
podman run [选项] <镜像> [命令]
常用选项:
-it:交互式终端(适合调试)
-d:后台运行(守护进程模式)
-p 宿主端口:容器端口:端口映射
--name:指定容器名称
--rm:容器停止后自动删除
示例:运行 Ubuntu 容器并进入交互式终端
C:\Users\hxstr> podman run -it --name my-ubuntu ubuntu:22.04 /bin/bash root@edf04a33bfb1:/# ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var root@edf04a33bfb1:/# date Sun Nov 9 00:16:30 UTC 2025 root@edf04a33bfb1:/#
上面命令用于基于 ubuntu:22.04 镜像创建并启动一个名为 my-ubuntu 的容器,并直接进入容器的 bash 终端。然后再 bash 终端执行 ls 和 date 命令。
命令详细说明:
podman run:Podman 创建并启动容器的核心命令,等价于先执行 podman create(创建容器)再执行 podman start(启动容器)。
-it:两个选项的组合,是交互式操作的关键:
-i(--interactive):保持容器的标准输入(STDIN)打开,确保能与容器内的进程交互(如输入命令)。
-t(--tty):为容器分配一个伪终端(模拟终端环境),使交互体验与本地终端一致(支持命令行提示符、光标移动等)。
--name my-ubuntu:为容器指定一个自定义名称 my-ubuntu(若不指定,Podman 会自动生成一个随机名称,如 loving_tesla)。指定名称后,后续操作(如停止、删除、进入容器)可直接使用名称而非容器 ID,更方便。
ubuntu:22.04:指定基础镜像,即基于 Ubuntu 22.04 版本的官方镜像创建容器。若本地没有该镜像,Podman 会自动从 Docker Hub 拉取。
/bin/bash:容器启动后执行的命令,即启动容器内的 bash 终端(Ubuntu 镜像默认的 shell 环境)。这会覆盖镜像的默认启动命令(Ubuntu 镜像默认命令通常是 /bin/bash,此处显式指定更清晰)。
注意:退出容器终端,容器将立即结束。
C:\Users\hxstr> podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES edf04a33bfb1 docker.io/library/ubuntu:22.04 /bin/bash 3 minutes ago Exited (130) 25 seconds ago my-ubuntu
示例:运行 Nginx 并映射端口(宿主8080 → 容器80)
C:\Users\hxstr> podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest d261fd19cb63 4 days ago 155 MB docker.io/library/tomcat latest f29228ec2c11 3 weeks ago 417 MB docker.io/library/ubuntu 22.04 392fa14dddd0 5 weeks ago 80.4 MB C:\Users\hxstr> podman run -d -p 8080:80 --name my-nginx nginx 3c9d92ee580bf6886c8dcc8e174a51d33ce5801f642435ea3719cad644e2d4fc
在宿主机通过浏览器访问 http://localhost:8080,效果如下图:

更多命令信息将在后续介绍。
在 Podman 中,查看当前正在运行的容器的核心命令是 podman ps,该命令会列出所有处于 “运行中(Running)” 状态的容器及其关键信息,方便用户了解容器的运行状态。
基本命令格式:
podman ps [选项]
注意:不添加任何选项时,仅显示当前正在运行的容器,包含容器 ID、名称、使用的镜像、启动命令、创建时间、状态、端口映射等关键信息。
例如:
C:\Users\hxstr> podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c9d92ee580b docker.io/library/nginx:latest nginx -g daemon o... About an hour ago Up About an hour 0.0.0.0:8080->80/tcp my-nginx
输出各字段含义:
CONTAINER ID:容器的唯一标识符(短 ID,完整 ID 可通过 --no-trunc 选项显示)。
IMAGE:容器基于的镜像(仓库地址 + 镜像名 + 标签)。
COMMAND:容器启动时执行的命令(如 nginx -g ... 或 /bin/bash)。
CREATED:容器的创建时间(相对时间,如 “5 minutes ago”)。
STATUS:容器当前的运行状态(如 “Up 5 minutes” 表示已运行 5 分钟)。
PORTS:宿主机与容器的端口映射关系(如 0.0.0.0:8080->80/tcp 表示宿主机 8080 端口映射到容器 80 端口),若未配置端口映射则为空。
NAMES:容器的名称(自定义名称或自动生成的名称)。
更多命令信息将在后续介绍。
Podman 中对容器状态的操作主要包括启动、停止、重启、暂停、恢复等,通过这些命令可灵活管理容器的运行生命周期。如下:
# 启动已停止的容器 podman start <容器名或ID> # 停止运行中的容器 podman stop <容器名或ID> # 重启容器 podman restart <容器名或ID>
示例:演示如何对 my-nginx 容器进行启动、停止、重启操作
# 查看正在运行的容器 C:\Users\hxstr> podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c9d92ee580b docker.io/library/nginx:latest nginx -g daemon o... About an hour ago Up About an hour 0.0.0.0:8080->80/tcp my-nginx # 停止正在运行的名为 my-nginx 的容器 C:\Users\hxstr> podman stop my-nginx my-nginx # 查看所有容器状态,包含已停止的容器 # 此时,名为 my-nginx 的容器状态为 Exited (0) 9 seconds ago # 表示容器已经停止 C:\Users\hxstr> podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES edf04a33bfb1 docker.io/library/ubuntu:22.04 /bin/bash 2 hours ago Exited (130) About an hour ago my-ubuntu 3c9d92ee580b docker.io/library/nginx:latest nginx -g daemon o... About an hour ago Exited (0) 9 seconds ago 0.0.0.0:8080->80/tcp my-nginx # 启动名为 my-nginx 的容器 C:\Users\hxstr> podman start my-nginx my-nginx # 查看正在运行的容器,名为 my-nginx 的容器再次被启动了 C:\Users\hxstr> podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c9d92ee580b docker.io/library/nginx:latest nginx -g daemon o... 2 hours ago Up 3 minutes 0.0.0.0:8080->80/tcp my-nginx # 重启容器 C:\Users\hxstr> podman restart my-nginx my-nginx
更多命令信息将在后续介绍。
在 Podman 中,进入运行中的容器(即进入容器内部的终端环境,执行命令或操作文件)的核心命令是 podman exec,通常配合 -it 选项实现交互式终端访问。这是调试容器内应用、查看日志或修改配置的常用操作。
命令格式如下:
podman exec -it <容器名或ID> /bin/bash
示例:进入 Nginx 容器(使用 bash),假设运行中的 Nginx 容器名称为 my-nginx,执行:
C:\Users\hxstr> podman exec -it my-nginx /bin/bash root@3c9d92ee580b:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@3c9d92ee580b:/#
如果要退出容器的 bash,执行 exit 命令:
root@3c9d92ee580b:/# exit exit C:\Users\hxstr>
更多命令信息将在后续介绍。
在 Podman 中,删除容器的核心命令是 podman rm(全称为 podman container rm),用于移除不再需要的容器(包括已停止或处于退出状态的容器),释放资源。注意:运行中的容器默认无法直接删除,需先停止或强制删除。
命令格式如下:
podman rm <容器名或ID> # 强制删除运行中的容器: podman rm -f <容器>
示例:若容器已停止(状态为 Exited),直接指定容器标识即可删除:
# 查看当前运行的容器,包含退出的容器 C:\Users\hxstr> podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES edf04a33bfb1 docker.io/library/ubuntu:22.04 /bin/bash 10 hours ago Exited (130) 10 hours ago my-ubuntu 3c9d92ee580b docker.io/library/nginx:latest nginx -g daemon o... 10 hours ago Up 8 hours 0.0.0.0:8080->80/tcp my-nginx # 直接删除已经退出的容器 C:\Users\hxstr> podman rm my-ubuntu my-ubuntu # 直接删除运行中的容器,出错了,不允许删除 C:\Users\hxstr> podman rm my-nginx Error: cannot remove container 3c9d92ee580bf6886c8dcc8e174a51d33ce5801f642435ea3719cad644e2d4fc as it is running - running or paused containers cannot be removed without force: container state improper
如果容器正在运行(状态为 Running),默认删除会失败,需使用 -f 或 --force 选项强制删除(会先终止容器再删除):
# 强制删除正在运行的容器 C:\Users\hxstr> podman rm -f my-nginx my-nginx
更多命令信息将在后续介绍。
在 Podman 中,查看容器日志的核心命令是 podman logs,用于获取容器运行过程中输出的日志信息(包括应用程序日志、错误信息等),是排查容器内应用问题的重要手段。
基本命令格式如下:
podman logs <容器名或ID> # 实时查看日志: podman logs -f <容器>
示例:
C:\Users\hxstr> podman logs my-nginx /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh ... 2025/11/09 10:02:47 [notice] 1#1: start worker process 39 2025/11/09 10:02:47 [notice] 1#1: start worker process 40 2025/11/09 10:02:47 [notice] 1#1: start worker process 41
更多命令信息将在后续介绍。
在 Podman 中,检查容器的详细信息(包括配置、网络、挂载、状态等)的核心命令是 podman inspect。该命令会以 JSON 格式输出容器的完整元数据,是深入了解容器运行环境、排查配置问题的重要工具。
基础命令格式如下:
podman inspect <容器名或ID>
示例:查看名为 my-nginx 容器的详细信息
C:\Users\hxstr> podman inspect my-nginx
[
{
"Id": "e88ed7e8c6be2d5a0493b6c952c9fcc54933eb3d5c0eee2b1c0d78c1ba982f9a",
"Created": "2025-11-09T18:02:47.18472464+08:00",
"Path": "/docker-entrypoint.sh",
"Args": [
"nginx",
"-g",
"daemon off;"
],
....
"UseImageHosts": false,
"UseImageHostname": false
}
]更多命令信息将在后续介绍。
在 Podman 中,随着使用时间增长,会积累一些无用资源(如未使用的镜像、停止的容器、悬空镜像、缓存数据等),占用磁盘空间。清理这些资源可通过 podman system prune 系列命令高效完成,也可针对性清理特定类型资源。
podman system prune -a # 加上 -f 可跳过确认: podman system prune -af
示例:
C:\Users\hxstr>podman system prune -a WARNING! This command removes: - all stopped containers - all networks not used by at least one container - all images without at least one container associated with them - all build cache Are you sure you want to continue? [y/N] y Deleted Images 392fa14dddd09da29a5c3d26948ff81c494424035b755d01b84ab12d92127433 f29228ec2c11e611d5a44d74c550d1e7b2884a7d2a00937284ab22970098825d Total reclaimed space: 497.2MB # 执行完后,再次查看镜像和容器信息,只剩下运行中的容器,和容器对应的镜像了 # 其他已经停止容器,以及没有使用的镜像全部被删除了 C:\Users\hxstr> podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest d261fd19cb63 5 days ago 155 MB C:\Users\hxstr> podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e88ed7e8c6be docker.io/library/nginx:latest nginx -g daemon o... 6 minutes ago Up 6 minutes 0.0.0.0:8080->80/tcp my-nginx C:\Users\hxstr> podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e88ed7e8c6be docker.io/library/nginx:latest nginx -g daemon o... 7 minutes ago Up 7 minutes 0.0.0.0:8080->80/tcp my-nginx
通过以上命令,你可以快速上手 Podman 的基本使用,体验容器化开发的便捷性。
更多 Podman 命令将在后续章节逐一展开……