目录

1. Podman 简介与核心特性

2. Podman 核心命令详解

2.1 镜像管理命令

2.2 容器生命周期管理

2.3 信息查看与文件操作

3. 环境准备:安装容器工具

4. 实战案例:Python 多版本容器环境

4.1 搜索和获取 Python 3.8 镜像

4.2 构建自定义 Python 3.6 镜像

4.3 验证镜像配置

5. 容器运行与管理

5.1 容器状态生命周期

5.2 创建和启动容器

6. 容器隔离特性详解

6.1 进程隔离验证

6.2 Python 版本隔离验证

6.3 文件系统隔离与文件共享

7. 容器与镜像清理

7.1 安全删除流程

8. 实战总结与最佳实践

8.1 两个 Python 容器的差异

8.2 版本冲突避免策略

8.3 生产环境建议

9. 结论


本文全面介绍 Podman 容器工具的使用方法,涵盖镜像管理、容器操作、环境隔离等核心概念,通过实际案例演示 Python 多版本环境的容器化部署。


1. Podman 简介与核心特性

Podman 是一个功能完整的容器引擎,来自 container-tools 元数据包,用于管理开放容器计划(OCI)容器和镜像。与 Docker 不同,Podman 采用无守护进程架构,这意味着开发人员无需系统上的特权用户帐户即可启动或停止容器。

主要优势:

  • 无需守护进程:更安全,减少攻击面

  • Rootless 模式:普通用户可直接运行容器

  • 兼容 Docker:大部分命令与 Docker 相似

  • 系统集成:可与 systemd 集成管理


2. Podman 核心命令详解

2.1 镜像管理命令

命令描述使用场景
podman build使用容器文件构建容器镜像自定义镜像创建
podman images列出本地存储中的镜像查看已下载镜像
podman pull从注册表下载镜像获取远程仓库镜像
podman search在注册表中搜索镜像查找可用镜像
podman rmi删除一个或多个本地存储的镜像清理磁盘空间

2.2 容器生命周期管理

命令描述使用场景
podman run在新容器中运行命令创建并启动容器
podman ps打印有关容器的信息查看容器状态
podman exec在运行中的容器内执行命令容器内操作
podman create创建容器但不启动预先配置容器
podman start启动已创建的容器启动停止的容器
podman stop停止运行中的容器优雅停止容器
podman rm删除一个或多个容器清理已停止容器

2.3 信息查看与文件操作

命令描述使用场景
podman inspect显示容器/镜像的配置信息详细配置查看
podman cp在容器和本地文件系统之间复制文件文件共享

3. 环境准备:安装容器工具

# 安装 container-tools 元数据包
sudo dnf install container-tools

# 查看安装的版本和信息
dnf info container-tools

container-tools 包含 Podman、Buildah、Skopeo 等必要工具,提供完整的容器管理能力。


4. 实战案例:Python 多版本容器环境

4.1 搜索和获取 Python 3.8 镜像

# 搜索包含 Python 3.8 的镜像
podman search python-38

# 检查镜像详细信息
skopeo inspect docker://registry.access.redhat.com/ubi8/python-38

# 拉取镜像到本地
podman pull registry.access.redhat.com/ubi8/python-38

# 验证本地镜像
podman images

命令解析:

  • podman search:在配置的注册表中查找包含指定软件的镜像

  • skopeo inspect:检查远程镜像的元数据,无需下载

  • podman pull:下载镜像到本地存储

4.2 构建自定义 Python 3.6 镜像

创建容器文件 Containerfile

FROM registry.access.redhat.com/ubi8/ubi:latest
RUN dnf install -y python36
CMD ["/bin/bash", "-c", "sleep infinity"]

构建自定义镜像:

# 构建镜像并指定标签
podman build -t python36:1.0 .

# 验证构建的镜像
podman images

构建参数说明:

  • -t python36:1.0:指定镜像名称和标签

  • .:使用当前目录作为构建上下文

4.3 验证镜像配置

# 检查镜像详细信息
podman inspect localhost/python36:1.0

输出关键信息包括:

  • 基础镜像信息

  • 安装的软件包

  • 默认启动命令

  • 镜像层级历史


5. 容器运行与管理

5.1 容器状态生命周期

容器可能处于以下状态:

  • Created:已创建但未启动

  • Running:正在运行

  • Stopped:进程已停止

  • Paused:进程已暂停

  • Deleted:已删除

5.2 创建和启动容器

方法一:分步创建

# 创建容器但不启动
podman create --name python36 localhost/python36:1.0

# 启动容器
podman start python36

# 查看运行状态
podman ps

方法二:直接运行

# 直接创建并运行容器(后台模式)
podman run -d --name python38 registry.access.redhat.com/ubi8/python-38 /bin/bash -c "sleep infinity"

参数说明:

  • -d:分离模式,在后台运行

  • --name:为容器指定名称

  • 如果本地不存在镜像,会自动从注册表拉取


6. 容器隔离特性详解

6.1 进程隔离验证

主机进程查看:

ps -ax
# 输出显示主机所有进程

容器内进程查看:

6.2 Python 版本隔离验证

# 查看主机 Python 版本
python3 --version

# 查看容器内的 Python 版本
podman exec python36 python3 --version
podman exec python38 python3 --version

输出结果示例:

  • 主机:Python 3.9.10

  • python36 容器:Python 3.6.8

  • python38 容器:Python 3.8.8

6.3 文件系统隔离与文件共享

创建测试文件:

echo "echo 'hello world'" > /tmp/hello.sh

文件系统隔离验证:

# 主机文件存在
stat /tmp/hello.sh

# 容器内文件不存在(证明隔离)
podman exec python38 stat /tmp/hello.sh

文件复制到容器:

# 复制文件到容器
podman cp /tmp/hello.sh python38:/tmp/hello.sh

# 验证文件已复制
podman exec python38 stat /tmp/hello.sh

# 在容器内执行脚本
podman exec python38 bash /tmp/hello.sh

7. 容器与镜像清理

7.1 安全删除流程

# 停止运行中的容器
podman stop python38

# 删除容器
podman rm python38

# 删除镜像(确保无容器使用)
podman rmi registry.access.redhat.com/ubi8/python-38

重要注意事项:

  • 必须先停止容器才能删除

  • 必须删除所有使用该镜像的容器后才能删除镜像

  • 删除操作不可逆,请谨慎执行


8. 实战总结与最佳实践

8.1 两个 Python 容器的差异

特性python36 容器python38 容器
基础镜像ubi8/ubi:latestubi8/python-38
构建方式自定义构建官方预制
镜像大小~266 MB~901 MB
Python版本3.6.83.8.8
适用场景需要定制环境标准Python环境

8.2 版本冲突避免策略

  1. 环境隔离:每个容器有独立的文件系统和运行环境

  2. 明确版本指定:构建时明确指定所需软件版本

  3. 标签管理:使用语义化版本标签管理镜像

  4. 依赖明确:在容器文件中明确所有依赖项

8.3 生产环境建议

  1. 使用特定版本标签:避免使用 latest 标签

  2. 定期更新基础镜像:获取安全更新

  3. 最小化镜像:只安装必要的软件包

  4. 多阶段构建:减少最终镜像大小

  5. 安全扫描:定期扫描镜像中的漏洞


9. 结论

Podman 提供了强大而安全的容器管理能力,特别适合开发和生产环境。通过本文的实战演示,我们学习了:

  • Podman 核心命令的使用方法和场景

  • 镜像的搜索、获取和构建流程

  • 容器的创建、启动和管理

  • 容器隔离特性的验证和应用

  • 多版本环境的隔离部署

更多推荐