Podman,Skopeo和Buildah
这三个工具都是符合OCI计划下的工具(github/containers)。主要是由RedHat推动的,他们配合可以完成Docker所有的功能,而且不需要守护程序或访问有root权限的组,更加安全可靠,是下一代容器容器工具。
什么是 Podman?
Podman 是 Docker 的替代品,用于容器化应用程序的本地开发。Podman 命令将 1 对 1 映射 Docker 命令,包括它们的参数。你可以使用 alias docker = podman 为 podman 添加别名,你可以安装podman-docker软件包来完成这个转换工作。这个软件包生成脚本/usr/bin/docker来使用相同的命令来运行podman。并且从不会发现管理本地容器的是两种完全不同的工具。
Podman 的核心功能之一是它专注于安全性。使用 Podman 不需要守护进程。相反,它使用传统的 fork-exec 模型,并且大量地使用用户名称空间和网络名称空间。因此,Podman 比 Docker 更加孤立,使用起来也更安全。你甚至可以在容器中充当 root,而无需在主机上授予容器或 Podman 任何 root 权限。同时,容器中的用户无法在主机上执行任何 root 级别的任务。使用普通用户运行Podman意味Podman在用户主目录下创建了一个仓库:~/.local/share/containers,这避免把/var/lib/containers目录设置成全局可写和导致其他潜在安全问题。这确保了每个用户都有自己专用的容器和镜像合集且同时使用Podman都不会对其他用户产生影响。当用户完成工作后,可以把镜像上传到公共仓库来分享给其他人。
你熟悉的命令——pull、push、build、run、commit、tag等,Podman都有。详细可以使用。值得注意的是,Podman部分命令添加了一些便捷参数。比如,Podman给podman rm和podman rmi命令添加了--all、-a。
如果需要了解更多关于Podman如何在非root用户环境下运行的信息,参见Dan Walsh的文章:Podman如何工作。
什么是Buildah?
Buildah是一个容器映像构建器工具,可生成OCI规范的镜像。它作为一个二进制文件分发,并用Go编写。Buildah在大多数现代Linux发行版中均作为软件包提供,只需遵循官方安装说明即可。
实际上Buildah更先出现。这可能会让Docker用户刚到困惑。为什么Podman用户也讨论Buildah?Podman不可以构建镜像吗?
Podman构建镜像和Docker类似,构建过程差不多。你可以使用Podman从Dockerfile构建镜像或者从镜像运行一个容器,在里边安装需要的程序然后提交更改到镜像标签。Buildah可以理解为创建和管理容器镜像的命令超集,因为它实现了对镜像更精准的操作。Podman的build命令是了Buildah的build命令功能的子集。它使用与Buildah相同的代码进行构建。
Buildah只能用于处理图像。它的工作是构建容器映像并将其推送到Registries。没有守护进程参与。Buildah也不要求root特权来构建映像。这使得Buildah作为CI / CD管道的一部分特别方便,您可以很容易地在容器中运行Buildah,而无需授予容器任何根权限。
使用Buildah最好的方法是编写用于创建映像的Bash脚本 - 与编写Dockerfile的方式类似。
什么是Skopeo?
Skopeo是一个命令行实用程序,允许我们对 Docker 与 OCI 镜像执行 psuh、pull 以及 copy 等操作。
Docker镜像迁移:
当你第一次运行命令podman images,你会发现你之前用docker拉取的镜像都不在了。这是因为Podman把镜像存放到/var/lib/containers,而不是/var/lib/docker。这不是特意改变的, 这种新的存储结构基于开放式容器倡议(OCI)标准。
2015年,Docker,Red Hat,CoreOS,SUSE,Google和Linux容器行业的其他领导者创建了开放式容器倡议(OCI)标准,以便提供一个独立的机构来管理定义容器镜像和运行时的标准规范。 为了保持这种独立性,容器/镜像和容器/存储项目是在GitHub上创建的。
podman使用:
以Centos 为例:
安装:
yum install -y podman
更多安装教程参考:官方文档
阿里云加速下载:
cp /etc/containers/registries.conf{,.bak} cat > /etc/containers/registries.conf << EOF unqualified-search-registries = ["docker.io"] [[registry]] prefix = "docker.io" location = "uyah70su.mirror.aliyuncs.com" EOF
命令:
podman的命令请参考: podman命令文档
还没有评论,来说两句吧...