1. 为什么选择Podman如果你正在寻找一个轻量级、无需守护进程的容器管理工具Podman绝对值得考虑。作为一个长期使用Docker的开发者我第一次接触Podman时就被它的设计理念吸引了。与Docker不同Podman采用无守护进程架构这意味着它更安全、更稳定而且资源占用更少。在实际项目中我发现Podman特别适合以下场景开发环境需要快速部署多个隔离的测试环境CI/CD流水线中需要轻量级的容器运行时安全性要求较高的生产环境因为不需要root权限就能运行容器Ubuntu作为最流行的Linux发行版之一与Podman的配合堪称完美。我在多个Ubuntu版本从18.04到22.04上都成功部署过Podman稳定性相当不错。下面我就来分享详细的安装和使用经验。2. 安装前的准备工作2.1 系统要求检查在开始安装之前建议先检查你的Ubuntu系统版本。打开终端输入以下命令lsb_release -a我建议使用Ubuntu 20.04或更高版本因为这些版本对Podman的支持更好。如果你使用的是较旧的版本可能需要手动添加额外的软件源。2.2 更新系统软件包这是一个容易被忽视但非常重要的步骤。我遇到过不少问题都是因为系统没有及时更新导致的。执行以下命令确保系统是最新的sudo apt update sudo apt upgrade -y这个过程可能需要几分钟时间取决于你的网络速度和系统更新量。完成后建议重启系统以确保所有更新生效。3. Podman安装详解3.1 通过官方仓库安装在Ubuntu上安装Podman最简单的方法就是使用apt包管理器。执行以下命令sudo apt install -y podman安装完成后验证是否安装成功podman --version如果看到类似podman version 3.4.4的输出说明安装成功了。我建议至少使用3.0以上版本因为早期版本可能缺少一些重要功能。3.2 配置cgroups v2Podman需要cgroups v2来管理容器资源。这是很多新手容易踩坑的地方。让我们一步步配置编辑GRUB配置文件sudo nano /etc/default/grub找到GRUB_CMDLINE_LINUX_DEFAULT行添加systemd.unified_cgroup_hierarchy1参数。修改后的行可能看起来像这样GRUB_CMDLINE_LINUX_DEFAULTquiet splash systemd.unified_cgroup_hierarchy1保存文件后更新GRUB配置sudo update-grub最后重启系统使更改生效sudo reboot重启后你可以通过以下命令验证cgroups v2是否启用cat /proc/self/cgroup如果看到输出中包含0::/字样说明cgroups v2已经成功启用。4. 容器管理实战4.1 运行第一个容器现在让我们运行一个简单的Ubuntu容器podman run -it --name my_first_container ubuntu /bin/bash这个命令会从Docker Hub拉取最新的Ubuntu镜像如果本地没有创建一个名为my_first_container的容器以交互模式(-it)启动bash shell第一次运行时可能会慢一些因为需要下载镜像。后续运行就会快很多。我在实际使用中发现Podman的镜像拉取速度通常比Docker要快一些。4.2 常用容器操作命令掌握这些命令你就能应对大部分日常容器管理工作列出运行中的容器podman ps列出所有容器包括停止的podman ps -a停止容器podman stop 容器ID或名称启动已停止的容器podman start 容器ID或名称删除容器podman rm 容器ID或名称查看容器日志podman logs 容器ID或名称我习惯给容器起有意义的名称如web_server、db_backup等这样管理起来更方便不必每次都记容器ID。4.3 镜像管理技巧镜像管理是容器使用的核心技能之一。以下是我总结的一些实用技巧搜索镜像podman search ubuntu拉取特定版本的镜像podman pull ubuntu:20.04列出本地镜像podman images删除镜像podman rmi 镜像ID导出镜像为tar文件podman save -o ubuntu_image.tar ubuntu从tar文件导入镜像podman load -i ubuntu_image.tar我建议定期清理不再使用的镜像可以节省大量磁盘空间。可以使用以下命令查看磁盘使用情况podman system df5. 高级使用技巧5.1 容器网络配置Podman提供了灵活的网络配置选项。默认情况下容器使用slirp4netns网络模式这是一种用户空间的网络栈实现。如果需要更复杂的网络配置可以这样操作创建自定义网络podman network create my_network运行容器并使用自定义网络podman run --networkmy_network -d --name web nginx查看网络详情podman network inspect my_network我在部署微服务架构时经常使用自定义网络来隔离不同服务之间的通信效果很好。5.2 数据持久化容器本身是临时的要实现数据持久化需要使用卷(volume)或绑定挂载创建卷podman volume create my_volume使用卷运行容器podman run -v my_volume:/data --name db redis或者直接挂载主机目录podman run -v /host/path:/container/path --name web nginx在实际项目中我通常将配置文件、数据库文件等重要数据通过卷或绑定挂载的方式持久化这样即使容器被删除数据也不会丢失。5.3 构建自定义镜像虽然可以从公共仓库拉取镜像但很多时候我们需要构建自己的镜像。创建一个简单的DockerfileFROM ubuntu:20.04 RUN apt update apt install -y nginx COPY index.html /var/www/html/ EXPOSE 80 CMD [nginx, -g, daemon off;]然后构建镜像podman build -t my_web_image .运行自定义镜像podman run -d -p 8080:80 --name my_web my_web_image我建议在Dockerfile中使用apt clean等命令来减小镜像体积并尽量合并RUN指令以减少镜像层数。6. 常见问题排查6.1 权限问题如果你遇到类似permission denied的错误可能是因为Podman默认以非root用户运行。解决方法有使用root运行sudo podman 命令或者配置subuid/subgidsudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(whoami)我在开发环境中通常使用第一种方法而在生产环境会配置好subuid/subgid。6.2 容器无法联网如果容器无法连接网络可以尝试检查防火墙设置sudo ufw status检查DNS配置podman run --rm alpine cat /etc/resolv.conf尝试使用不同的网络驱动podman run --networkhost ...6.3 性能问题如果发现容器性能不佳可以考虑限制容器资源使用podman run --cpus1 --memory512m ...检查cgroups配置是否正确确保使用最新版本的Podman我在处理性能问题时通常会先用podman stats命令查看容器的实时资源使用情况然后再有针对性地调整参数。
Ubuntu系统下Podman的安装与容器管理实战
发布时间:2026/5/27 13:54:50
1. 为什么选择Podman如果你正在寻找一个轻量级、无需守护进程的容器管理工具Podman绝对值得考虑。作为一个长期使用Docker的开发者我第一次接触Podman时就被它的设计理念吸引了。与Docker不同Podman采用无守护进程架构这意味着它更安全、更稳定而且资源占用更少。在实际项目中我发现Podman特别适合以下场景开发环境需要快速部署多个隔离的测试环境CI/CD流水线中需要轻量级的容器运行时安全性要求较高的生产环境因为不需要root权限就能运行容器Ubuntu作为最流行的Linux发行版之一与Podman的配合堪称完美。我在多个Ubuntu版本从18.04到22.04上都成功部署过Podman稳定性相当不错。下面我就来分享详细的安装和使用经验。2. 安装前的准备工作2.1 系统要求检查在开始安装之前建议先检查你的Ubuntu系统版本。打开终端输入以下命令lsb_release -a我建议使用Ubuntu 20.04或更高版本因为这些版本对Podman的支持更好。如果你使用的是较旧的版本可能需要手动添加额外的软件源。2.2 更新系统软件包这是一个容易被忽视但非常重要的步骤。我遇到过不少问题都是因为系统没有及时更新导致的。执行以下命令确保系统是最新的sudo apt update sudo apt upgrade -y这个过程可能需要几分钟时间取决于你的网络速度和系统更新量。完成后建议重启系统以确保所有更新生效。3. Podman安装详解3.1 通过官方仓库安装在Ubuntu上安装Podman最简单的方法就是使用apt包管理器。执行以下命令sudo apt install -y podman安装完成后验证是否安装成功podman --version如果看到类似podman version 3.4.4的输出说明安装成功了。我建议至少使用3.0以上版本因为早期版本可能缺少一些重要功能。3.2 配置cgroups v2Podman需要cgroups v2来管理容器资源。这是很多新手容易踩坑的地方。让我们一步步配置编辑GRUB配置文件sudo nano /etc/default/grub找到GRUB_CMDLINE_LINUX_DEFAULT行添加systemd.unified_cgroup_hierarchy1参数。修改后的行可能看起来像这样GRUB_CMDLINE_LINUX_DEFAULTquiet splash systemd.unified_cgroup_hierarchy1保存文件后更新GRUB配置sudo update-grub最后重启系统使更改生效sudo reboot重启后你可以通过以下命令验证cgroups v2是否启用cat /proc/self/cgroup如果看到输出中包含0::/字样说明cgroups v2已经成功启用。4. 容器管理实战4.1 运行第一个容器现在让我们运行一个简单的Ubuntu容器podman run -it --name my_first_container ubuntu /bin/bash这个命令会从Docker Hub拉取最新的Ubuntu镜像如果本地没有创建一个名为my_first_container的容器以交互模式(-it)启动bash shell第一次运行时可能会慢一些因为需要下载镜像。后续运行就会快很多。我在实际使用中发现Podman的镜像拉取速度通常比Docker要快一些。4.2 常用容器操作命令掌握这些命令你就能应对大部分日常容器管理工作列出运行中的容器podman ps列出所有容器包括停止的podman ps -a停止容器podman stop 容器ID或名称启动已停止的容器podman start 容器ID或名称删除容器podman rm 容器ID或名称查看容器日志podman logs 容器ID或名称我习惯给容器起有意义的名称如web_server、db_backup等这样管理起来更方便不必每次都记容器ID。4.3 镜像管理技巧镜像管理是容器使用的核心技能之一。以下是我总结的一些实用技巧搜索镜像podman search ubuntu拉取特定版本的镜像podman pull ubuntu:20.04列出本地镜像podman images删除镜像podman rmi 镜像ID导出镜像为tar文件podman save -o ubuntu_image.tar ubuntu从tar文件导入镜像podman load -i ubuntu_image.tar我建议定期清理不再使用的镜像可以节省大量磁盘空间。可以使用以下命令查看磁盘使用情况podman system df5. 高级使用技巧5.1 容器网络配置Podman提供了灵活的网络配置选项。默认情况下容器使用slirp4netns网络模式这是一种用户空间的网络栈实现。如果需要更复杂的网络配置可以这样操作创建自定义网络podman network create my_network运行容器并使用自定义网络podman run --networkmy_network -d --name web nginx查看网络详情podman network inspect my_network我在部署微服务架构时经常使用自定义网络来隔离不同服务之间的通信效果很好。5.2 数据持久化容器本身是临时的要实现数据持久化需要使用卷(volume)或绑定挂载创建卷podman volume create my_volume使用卷运行容器podman run -v my_volume:/data --name db redis或者直接挂载主机目录podman run -v /host/path:/container/path --name web nginx在实际项目中我通常将配置文件、数据库文件等重要数据通过卷或绑定挂载的方式持久化这样即使容器被删除数据也不会丢失。5.3 构建自定义镜像虽然可以从公共仓库拉取镜像但很多时候我们需要构建自己的镜像。创建一个简单的DockerfileFROM ubuntu:20.04 RUN apt update apt install -y nginx COPY index.html /var/www/html/ EXPOSE 80 CMD [nginx, -g, daemon off;]然后构建镜像podman build -t my_web_image .运行自定义镜像podman run -d -p 8080:80 --name my_web my_web_image我建议在Dockerfile中使用apt clean等命令来减小镜像体积并尽量合并RUN指令以减少镜像层数。6. 常见问题排查6.1 权限问题如果你遇到类似permission denied的错误可能是因为Podman默认以非root用户运行。解决方法有使用root运行sudo podman 命令或者配置subuid/subgidsudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(whoami)我在开发环境中通常使用第一种方法而在生产环境会配置好subuid/subgid。6.2 容器无法联网如果容器无法连接网络可以尝试检查防火墙设置sudo ufw status检查DNS配置podman run --rm alpine cat /etc/resolv.conf尝试使用不同的网络驱动podman run --networkhost ...6.3 性能问题如果发现容器性能不佳可以考虑限制容器资源使用podman run --cpus1 --memory512m ...检查cgroups配置是否正确确保使用最新版本的Podman我在处理性能问题时通常会先用podman stats命令查看容器的实时资源使用情况然后再有针对性地调整参数。