试用 Podman,一个无需 root 权限的 Docker 替代方案。

您好,

系统解决方案部的

最近天气很冷。
这次我想写一篇关于Podman入门的文章。

         .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ oo \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~ 

Podman是什么?

Pod Manager
是 Red Hat 开发的开源容器工具。它与 Docker 兼容,使用方法也几乎相同。更多信息请参阅官方文档:
https://www.redhat.com/ja/topics/containers/what-is-podman

你可能会想:“什么?那为什么不用 Docker 呢?
” 然而,Podman 默认是无根的,因此它具有更高的安全性。
(注意:Docker 也能做到这一点,但需要额外的配置。)

无根模式之所以安全,是因为
Docker 是以守护进程的形式运行,由 root 用户启动,并通过 REST API 与宿主机通信。
这使用了域套接字,而域套接字需要 root 权限,因此有可能从容器内攻击宿主机

我们马上试试吧。

安装

■环境

Ubuntu 24.04 LTS

安装本身很简单。
*如果您使用docker-compose,也可以安装 podman-compose

$ sudo apt update $ sudo apt install podman $ podman --version podman 版本 4.9.3

检查是否处于无根模式(如果是,则没问题)

$ podman info | grep rootless rootless: true

图片提取

安装完成后,让我们以普通用户身份尝试拉取 Apache 镜像。

$ podman pull docker.io/library/httpd 尝试拉取 docker.io/library/httpd:latest... 获取镜像源签名 复制 blob 79b49624e34b 完成 | 复制 blob d7ad38c6dd97 完成 | 复制 blob 4f4fb700ef54 完成 | 复制 blob 9bd25d4f7b77 完成 | 复制 blob 7d9f97915db2 完成 | 复制 blob bc0965b23a04 完成 | 复制 config 494b2b45fd 完成 | 正在将清单写入镜像目标 494b2b45fd74cbf7eb7dc9cfeda02b26c9450e26719afaf1914635832217c4ce

一切就绪,让我们开始吧。
这次我们将使用 TCP/8888 端口。

$ podman run -dt -p 8888:80/tcp docker.io/library/httpd 6e5578b6ab93e131593325aa61c8b78487d6d602a74c78b714aa8b089ac12d0f # 检查启动状态 $ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e5578b6ab93 docker.io/library/httpd:latest httpd-foreground 5 seconds ago Up 5 seconds 0.0.0.0:8888->80/tcp quizzical_tharp

现在它已经启动了,我们来尝试访问它。
如果它显示“有效!”,那就没问题了。

$ curl http://127.0.0.1:8888<html><body><h1>有用!</h1></body></html>

它也会出现在浏览器中。

就像 Docker 一样,你也可以查看日志和进程状态。

$ podman logs -l [Thu Dec 12 02:48:15.892285 2024] [mpm_event:notice] [pid 1:tid 1] AH00489: Apache/2.4.62 (Unix) 已配置 -- 恢复正常运行 [Thu Dec 12 02:48:15.893410 2024] [core:notice] [pid 1:tid 1] AH00094: 命令行:'httpd -D FOREGROUND' 10.0.2.100 - - [12/Dec/2024:02:48:57 +0000] "GET / HTTP/1.1" 200 45 10.0.2.100 - - [12/Dec/2024:02:48:57 +0000] "GET /favicon.ico HTTP/1.1" 404 196 10.0.2.100 - - [12/Dec/2024:02:50:24 +0000] "GET / HTTP/1.1" 200 45 ~$ podman top -l USER PID PPID %CPU ELAPSED TTY TIME COMMAND root 1 0 0.000 4m36.020462289s pts/0 0s httpd -DFOREGROUND www-data 8 1 0.000 4m36.022522465s pts/0 0s httpd -DFOREGROUND www-data 9 1 0.000 4m36.02299156s pts/0 0s httpd -DFOREGROUND www-data 10 1 0.000 4m36.023751351s pts/0 0s httpd -DFOREGROUND 

当然,两者之间肯定存在一些差异,但我认为任何使用过 Docker 的人都能轻松上手。

$ podman run quay.io/podman/hello 正在尝试拉取 quay.io/podman/hello:latest... 获取镜像源签名 复制 blob 81df7ff16254 完成 | 复制配置 5dd467fce5 完成 | 正在将清单写入镜像目标!... Hello Podman World ...! .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- |. https://docs.podman.io YouTube: https://youtube.com/@Podman X/Twitter: @Podman_io Mastodon: @ [email protected]

顺便一提,Podman的官方角色并非海豹,而是塞尔基的苏格兰神话生物
(据说,这个名字来源于一群塞尔基被称为“pods”。真可爱。)

完全的

如果您觉得这篇文章有用,请点击【点赞】!
3
加载中...
3票,平均分:1.00/13
1,471
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

川健

来自系统解决方案部门的
一只奇特的宝可梦