Linux 容器是由 Linux 内核提供的具有某些隔离特性的进程——包括文件系统、进程和网络隔离。 容器有助于提高可移植性——应用程序可以连同它们的依赖项一起分布在容器镜像中,并且几乎可以在任何具有容器运行时的 Linux 系统上运行。
虽然容器技术存在很长时间,但 Linux 容器被 Docker 广泛普及。 “Docker”这个词可以指几个不同的东西,包括容器技术和工具、围绕它的社区或 Docker Inc. 公司。 但是,在本文中,我将使用它来指代管理 Linux 容器的技术和工具。
什么是 Docker
码头工人 是一个以 root 身份在您的系统上运行的守护进程,并通过利用 Linux 内核的特性来管理正在运行的容器。 除了运行容器之外,它还可以轻松管理容器镜像——与容器注册表交互、存储镜像、管理容器版本等。它基本上支持运行单个容器所需的所有操作。
但是,尽管 Docker 是一个非常方便的管理 Linux 容器的工具,它也有两个缺点:它是一个需要在您的系统上运行的守护进程,并且它需要以 root 权限运行,这可能会带来一定的安全隐患。 然而,Podman 正在解决这两个问题。
介绍 Podman
波德曼 是一个容器运行时,提供与 Docker 非常相似的功能。 正如已经暗示的那样,它不需要任何守护程序在您的系统上运行,它也可以在没有 root 权限的情况下运行。 那么让我们看一些使用 Podman 运行 Linux 容器的示例。
使用 Podman 运行容器
最简单的示例之一可能是运行 Fedora 容器,打印“Hello world!” 在命令行中:
$ podman run --rm -it fedora:28 echo "Hello world!"
使用通用 Dockerfile 构建镜像的方式与使用 Docker 相同:
$ cat Dockerfile FROM fedora:28 RUN dnf -y install cowsay $ podman build . -t hello-world ... output omitted ... $ podman run --rm -it hello-world cowsay "Hello!"
为了构建容器,Podman 在后台调用了另一个名为 Buildah 的工具。 你可以阅读最近一篇关于使用 Buildah 构建容器镜像的文章——不仅仅是使用典型的 Dockerfile。
除了构建和运行容器之外,Podman 还可以与容器注册表交互。 要登录到容器注册表,对于 example 广泛使用的 Docker Hub,运行:
$ podman login docker.io
要推送我刚刚构建的镜像,我只需要标记,使其引用特定的容器注册表和我的个人命名空间,然后简单地推送它。
$ podman -t hello-world docker.io/asamalik/hello-world $ podman push docker.io/asamalik/hello-world
顺便说一句,您是否注意到我如何以非 root 用户身份运行所有内容? 另外,我的系统上没有运行大的胖守护程序!
安装 Podman
Podman 默认在 银蓝 — 用于基于容器的工作流的新一代 Linux 工作站。 将其安装在任何 Fedora 发布,只需运行:
$ sudo dnf install podman