[容器] Podman : 一款新型的容器引擎与容器管理工具
1 概述: Podman
-
当我们谈论容器时,我们首先想到的默认工具就是
Docker。但自从 Docker 诞生以来,容器领域已经有了很多发展,特别是在容器安全方面。Podman是解决安全问题的项目之一。 -
Podman(POD Manager)是一个开源的无守护进程(
daemonless)容器引擎,用于管理容器、容器镜像、容器卷和网络。
- 它兼容
OCI标准,可以运行Docker镜像,并且设计上与 Docker CLI 命令高度兼容。
什么是PodMan?比 Docker 更安全的竞品
-
Podman(POD Manager)是一款符合OCI标准的容器管理工具,提供与 Docker 类似的容器管理功能。 -
podman的最佳功能之一是它能够运行无根容器。
无根容器是在没有根权限(普通用户)的情况下运行和管理容器的概念。
从安全角度来看,无根容器即使在容器受到攻击者破坏的情况下也不允许根访问,从而增加了额外的安全层。
您可以在此处了解【无根容器】的优点。
注意: Docker 也支持无根模式,但有一些限制。您可以在这里阅读相关内容。
Podman也是无守护进程的(与 docker 不同)。
这意味着它没有守护进程并直接与
runc交互(运行基于 OCI 规范的容器)。
在文章的最后,我补充了Docker 和 Podman 之间的区别。
另外,假设 Linux 中有两个用户。用户 a和用户 b。用户 a使用 podman创建的容器不能被用户 b修改,反之亦然。
2 安装使用
2.1 安装 Podman
- 前往官方 Podman 安装文档。 在这里您可以找到 Windows、MAC 和 Linux 版本的所有安装命令。
注意:对于 Windows 和 Mac,podman 需要虚拟机来部署容器。
2.1.1 安装 on Linux
Ubuntu 20.10 为例
- 对于Debian 11 和 ubuntu 20.10 或更高版本,您可以使用以下步骤。
sudo apt-get install runc -y
sudo apt-get -y install podman
- 对于 CentOS 7:
sudo yum -y install podman
- 对于 MAC,安装 Podaman; 然后, 使用 podman machine 命令初始化基于QEMU的虚拟机。
brew install podman
podman machine init
podman machine start
- 安装后,使用以下命令验证安装。
podman version
2.2 Podman 容器注册表配置
- 默认情况下,Podman 配置有两个容器注册表。
- 您可以在以下文件中找到默认的 Podman 容器注册表配置。
/etc/containers/registries.conf

- 您可以将自定义或私有容器注册表添加到此配置。
例如,Google容器注册表、AWS ECR、自托管私有注册表等。
- 如果您想使用
registry中的其他私有容器镜像,可以使用命令登录registry podman。
例如,要登录
docker hub:
podman login docker.io
登录后,您将能够使用
podman命令从docker hub中提取容器镜像
- 如果您希望为【特定用户】拥有不同的【注册表配置】,您可以
registries.conf在用户目录中创建单独的容器注册表信息。
$HOME/.config/containers/registries.conf
2.3 Podman 容器存储
- 每个系统用户都有自己的容器存储。
这意味着,如果您尝试从不同的用户登录中提取映像,它将从【远程注册表】而不是【本地映像】中提取【映像】。
- 例如,
- 对于root 用户,容器存储在
/var/lib/containers/storage目录中- 对于其他用户,容器存储在
$HOME/.local/share/containers/storage/目录中
2.4 使用 Podman 管理容器
-
您可以像使用
docker一样管理容器。但是,我们将使用podman作为带有类似于docker标志的命令,而不是docker命令。 -
此外,您可以使用任何没有
sudo权限的用户运行podman命令。
拉取镜像
- 首先,让我们尝试拉取镜像。
默认情况下,podman 首先在
quay.io中搜索镜像,然后在docker.io中搜索。
如果quay.io中不存在映像,podman会在docker.io中搜索并拉取该映像。
因此,最好指定注册表端点的完整映像名称。例如:
podman pull docker.io/nginx
podman pull quay.io/quay/busybox
创建并运行容器
- 让我们从
dockerhub注册表运行 Nginx 容器。
以下命令运行具有主机端口映射的 Nginx 容器
8080。
podman run --name docker-nginx -p 8080:80 docker.io/nginx
-
如果您看到的话,上面的
podman命令相当于docker命令和标志。 -
在无根模式(【普通用户模式】)下不能使用低于
1024的端口。
因为【普通用户容器命名空间】确实具有映射这些端口的权限。
如果您想使用podman映射小于1024的主机端口,您应该以root用户或使用sudo权限运行podman,如下所示:
sudo podman run --name docker-nginx -p 80:80 docker.io/nginx
检查映射的端口
- 您可以使用以下命令检查映射的端口。
-l返回最新容器的详细信息。
podman port -l
检查容器
- 您可以使用检查命令检查容器。
podman inspect -l
其他命令
- 其他停止、移除和删除容器的命令与 docker 命令的工作方式相同。
- 举几个例子:
podman images
podman ps
podman ps -a
podman stop <container-name>
podman rm <container-name>
帮助手册(help)
- 运行
help命令以了解所有可用的 podman 命令。
podman --help
2.5 使用 Podman 构建容器镜像
- 让我们尝试使用自定义 HTML 文件构建 Nginx 的容器映像。我在 GitHub 存储库中有 Dockerfile 和 HTML 文件。
- 让我们将 repo 和 cd 克隆到 repo nginx-image目录中
git clone https://github.com/scriptcamp/podman.git
cd podman/nginx-image
-
在
nginx-image文件夹内,您将看到一个Dockerfile和index.html文件。 -
让我们使用 podman 构建容器镜像。该命令与 docker 命令类似。
podman build -t scriptcamp/nginx .
- 现在,让我们将映像推送到容器注册表。确保您已登录容器注册表以推送映像。这里我使用的是dockerhub。
podman push scriptcamp/nginx
2.6 使用 Podman 创建 Pod
-
Podaman的高级功能之一是它能够创建类似于Kubernetes Pod的Pod。 -
Pod是一个可以拥有一个或多个容器的单元。 -
具体步骤:
- 创建空 pod:当您创建空 pod 时,Podman 会分配一个基础容器 k8s.gcr.io/pause 来保存命名空间,并允许与 pod 中的其他容器进行通信。
- 您可以在 Pod 中添加和删除容器。
- 您可以在 Pod 中创建完整的应用程序堆栈。
- 您可以在 Pod 内有选择地启动和停止容器。
- 现在让我们看一下示例。
要了解所有可用的 podman pod 命令,只需运行 help 命令即可。
podman pod --help
创建一个空 Pod
- 让我们创建一个空的 Pod。如果您不指定该
--name标志,podman将创建一个具有随机名称的 pod。
podman pod create --name demo-pod
- 让我们列出创建的 Pod。
podman pod ls
- 列出 pod 中的所有容器。对于空 Pod,将k8s.gcr.io/pause添加一个容器。
podman ps -a --pod
将容器添加到 Podman Pod
- 让我们向空 pod 添加一个 Nginx 容器。如果运行以下命令后列出容器,您将看到 Nginx 容器添加到
demo-pod
podman run -dt --pod demo-pod nginx
Y 推荐文献
/quay/redis,/quay/ubuntu,/quay/busybox,quay/elasticsearch, ...
X 参考文献
echo '{"registry-mirrors": ["https://swr.cn-south-1.myhuaweicloud.com"]}' > /etc/containers/registries.conf
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

浙公网安备 33010602011771号