podman

2024-12-23

go

在读书上,数量并不列于首要,重要的是书的品质与所引起的思索的程度。——富兰克林

Github: https://github.com/containers/podman/

官方网站: https://podman.io/

最近开始研究容器化技术,发现了Podman这个非常有趣的开源项目。它是一个专为Linux平台设计的无守护进程容器引擎,完全兼容OCI(Open Container Initiative)标准,能够作为Docker的替代品,甚至在某些场景下更具优势,例如本地开发与测试。

与传统的Docker不同,Podman的一个显著特点是它是无守护进程的,这意味着它不需要像Docker那样有一个长期运行的服务。这种设计使得Podman更加轻量化,并且在安全性上也有一定的提升,因为它能够以非root用户运行容器。

安装非常简单,可以直接使用系统的包管理工具。例如在Fedora上,只需要运行:

1
sudo dnf install podman

在Debian或Ubuntu上,则可以使用:

1
sudo apt install podman

安装完成后,Podman的命令基本与Docker一致。比如拉取镜像:

1
podman pull alpine

运行容器:

1
podman run -it alpine sh

使用起来非常直观,几乎不需要额外学习成本。

如果需要管理容器和镜像,Podman提供了一套与Docker兼容的命令行工具,比如:

  • 查看运行中的容器:
1
podman ps
  • 列出镜像:
1
podman images
  • 删除镜像:
1
podman rmi <image-id>

Podman在运行容器时不依赖守护进程,因此每个容器都由独立的进程管理。这种设计带来的另一个好处是可以直接通过系统的进程工具(如pstop)查看和管理容器。这一点在需要调试或优化容器性能时非常有用。

另外一个亮点是Podman支持Pod的概念。Pod是一个共享网络和存储空间的容器组,类似于Kubernetes中的Pod。这使得在本地开发Kubernetes应用时,Podman成为一个非常友好的工具。创建Pod的命令也很简单:

1
podman pod create --name mypod

将容器加入Pod:

1
podman run --pod mypod -it alpine sh

对于习惯于Docker的用户,Podman还提供了一个叫podman-docker的工具,可以让Docker命令直接调用Podman。只需要安装这个工具,几乎可以无缝迁移到Podman。

另一个非常吸引人的功能是Podman的Rootless模式。这种模式允许用户在没有root权限的情况下运行容器,极大地提高了安全性。在多用户共享环境中,这种设计显得尤为重要。

如果需要构建镜像,Podman也支持使用Dockerfile进行构建,命令与Docker完全一致:

1
podman build -t myimage .

它还支持生成和运行Systemd服务文件,用于将容器配置为Linux服务。例如:

1
podman generate systemd --name mycontainer

生成的服务文件可以直接用Systemd管理,非常适合需要长期运行的容器化服务。

除了强大的功能,Podman的生态也在不断发展。它提供了Podman Desktop图形界面,便于管理容器和镜像。此外,与Buildah、Skopeo等工具的集成使得Podman的使用场景更加广泛。这些工具分别用于构建和分发容器镜像,形成了一个完整的容器化工作流。

经过一段时间的使用,感觉Podman特别适合那些关注安全性、需要无root运行容器的场景。同时,它对Kubernetes的支持也让它成为开发K8s应用的利器。如果你正在寻找一个轻量级、兼容性强的容器引擎,不妨试试Podman。