如何在 Ubuntu 20.04 上安装和使用 Podman(Docker 替代方案)
本教程适用于这些操作系统版本
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 20.04(Focal Fossa)
在此页
- 先决条件
- 在 Ubuntu 20.04 上安装 Podman
- 创建新用户并运行 hello-world 容器
- Podman 基本用法
- 结论
Podman 是一种用于管理容器、映像、卷和 Pod(容器组)的开源工具。它使用 libpod 库 API 来管理容器生命周期,并支持多种容器映像格式,包括 OCI(开放容器计划)和 Docker 映像。
Podman 是 OCI(Open Container Initiative)合规容器引擎。它与 Docker CLI 接口兼容,并允许您以无根方式运行容器(在没有根权限的情况下运行容器)。 Podman 作为 Red Hat Enterprise Linux 的一部分发布,旨在成为下一代 Linux 容器工具,具有更快的实验和功能开发。
在本教程中,您将学习如何在 Ubuntu 20.04 系统上安装 Podman。您将安装 Podman 并学习 podman 的基本用法来管理 Docker 容器、图像和卷。
先决条件
- 一个 Ubuntu 20.04 服务器——确保所有软件包都是最新版本,以摆脱已弃用的依赖项并导致您在安装过程中出错。
- 具有 root 权限的用户或用户 root - 用于安装新软件包和更改系统范围的配置。
在 Ubuntu 20.04 上安装 Podman
首先,您将添加第三方存储库和密钥以在 Ubuntu 20.04 系统上安装 podman。
1.执行以下命令导出/etc/os-release文件上的环境变量。
. /etc/os-release
2. 添加具有稳定版本的 podman 存储库,并使用以下命令将 GPG 密钥添加到您的系统。
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key" | sudo apt-key add -
3. 更新/刷新 Ubuntu 存储库并将所有软件包升级到最新版本。
sudo apt update
sudo apt -y upgrade

4. 之后,使用下面的 apt 命令安装 podman。
sudo apt install podman
键入 y 并按 Enter 以继续安装。

5. 安装完成后,使用以下命令验证 podman 版本。
podman version
以下是您将获得的类似输出。

可以看出,您已经安装了使用 Go 1.16 为 Linux 架构 amd64(64 位)编译的 podman v3.3.1。
创建新用户并运行 hello-world 容器
Podman 允许您在没有 root 权限的用户下运行容器。在此阶段,您将添加一个新用户并运行基于 Docker 映像的容器 hello-world。
1.执行以下命令添加新用户johndoe。
useradd -m -s /bin/bash johndoe
passwd johndoe
为用户 johndoe 键入新密码。
2. 接下来,以johndoe用户登录,运行基于Docker镜像hello-world的容器。
以用户 johndoe 身份登录。
su - johndoe
使用 podman 命令运行基于 Docker 镜像 hello-world 的新容器。
podman run hello-world
系统将询问您要使用哪个容器注册表,选择 docker.io 容器注册表,您将看到如下类似的输出。

3. 要在本地计算机上验证您的容器和图像,请执行以下命令。
podman ps -a
podman images
您将看到一个新容器已创建,当前状态为已退出。该容器基于 hello-world Docker 映像。

Podman 基本用法
通过本指南,您将学习如何使用 podman 管理容器、镜像和卷。您将学习用于管理容器的 podman 的基本命令,您将在本指南中使用的命令与 Docker CLI 命令 100% 相同。
1. 要查找与 podman 兼容的容器镜像,请执行下面的 podman 命令。
podman search nginx
您将看到来自默认 Docker 镜像注册表和 Quay 镜像注册表的容器镜像列表。
从 Docker 注册表中选择容器镜像 nginx,并使用下面的 podman 命令下载到本地计算机。
podman pull nginx:alpine
选择容器注册表 docker.io,Nginx 容器映像的下载过程将开始。

2. 要检查本地计算机上可用的容器映像,请执行下面的 podman 命令。
podman images
您将看到两个图像 - hello-world 和 nginx 图像。

3. 接下来,要启动并运行基于镜像 nginx:alpine 的新容器,请执行带有运行选项的 podman 命令,如下所示。
podman run -it --rm -d -p 8080:80 --name web nginx:alpine
您必须知道的一些选项:
- -i 或 --interactive - 保持容器 STDIN 打开,即使未连接。
- -t 或 --tty - 分配一个伪终端,将您的终端与容器的 STDIN 和 STDOUT 连接起来。
- --rm - 当容器退出或停止时自动删除容器。
- -d - 在后台运行容器,运行后解除容器。
- -p 8080:80 - 映射容器和主机系统之间的端口。容器上的 80 端口映射到主机系统的 8080 端口。
- --name web - 指定新容器名称为 web。
- nginx:alpine - 我们使用的镜像是 nginx:alpine。
您将看到正在运行的容器的随机字符串和编号。使用下面的 podman 命令验证您正在运行的容器。
podman ps
您将看到如下输出。

容器状态为 Up 并在主机上公开端口 TCP 端口 8080。
打开您的网络浏览器并使用端口 8080 访问您的服务器 IP 地址,如下所示。
你会看到你的 nginx 容器的默认 index.html 年龄。

4. 此外,您可以使用下面的日志选项检查容器的日志。
podman logs web

或者您可以使用 --tail 选项指定容器日志的最后几行,如下所示。
podman logs --tail 10 web

5. 现在您可以使用 podman 选项 stop 停止正在运行的容器,如下所示。
podman stop web
您的容器网络将停止。使用下面的命令检查。
podman ps
podman ps -a
你会看到类似下面的输出。

容器 Web 已停止并自动删除,因为您在 podman 命令中使用了选项 --rm。
6.接下来,您将学习如何使用自定义卷更改新容器上的默认index.html。
使用以下命令创建一个新目录 ~/data 和 index.html 文件。
mkdir -p ~/data/
nano ~/data/index.html
复制并粘贴下面的 HTML 脚本。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to Container Nginx</title>
</head>
<body>
<h2>Hello from Nginx container - Managed with Podman</h2>
</body>
</html>
按 Ctrl+x 按钮,键入 y,然后按 Enter 保存配置并退出。
现在执行以下 podman 命令以运行具有自定义卷的新容器。
podman run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine
你必须知道的一个选项:
- -v - 指定容器的体积。 ~/data目录会挂载到新的容器目录/usr/share/nginx/html。
现在执行以下命令来验证正在运行的容器。
podman ps
您将在状态 Up 中看到新的容器 Web。

接下来,打开您的网络浏览器并输入您的服务器 IP 地址和端口 8080。
您将在顶部看到您创建的自定义 index.html 页面,这意味着 ~/data 目录已挂载到 Web 容器。

7.接下来,您可以使用选项exec登录到正在运行的容器并执行sh shell。
使用以下命令确保您的容器 Web 正在运行。
podman ps
现在执行下面的 podman 命令登录到容器 web。
podman exec -it web /bin/sh
检查容器 Web 的主机名。
hostname
查看容器web的IP地址和路由表。
ip a
route -n
现在键入 exit 从容器 web 注销。

8. 现在使用以下命令清理您的环境。
使用下面的 podman 命令停止容器 Web。
podman stop web
使用下面的 podman 命令删除所有状态为 Exited 的容器。
podman rm $(podman ps --filter "status=exited" -q)

结论
恭喜!您已经在 Ubuntu 20.04 系统上成功安装了 Podman。此外,您还学习了 podman 的基本用法,用于下载容器镜像、运行容器、检查容器状态、日志,以及 podman 的基本用法,用于管理卷。对于下一步,您可以尝试创建符合 OCI 规范的自定义图像,以便将您的应用程序推送/上传到容器注册表。