Podman实战
上QQ阅读APP看书,第一时间看更新

1.1 术语说明

在正式学习之前,我认为首先定义本书中要用到的术语很重要。在容器领域,像容器编排器、容器引擎和容器运行时这样的术语经常被交替使用,这通常会导致概念混淆。以下是本书对这些术语的总结。

容器编排器:指将容器分配到多个不同的机器或者节点上的软件项目或产品。编排器通过与容器引擎通信来运行容器。当前主要的容器编排器是Kubernetes,最初它被设计用来与Docker守护进程交互,但是由于Kubernetes主要使用CRI-O或containerd作为其容器引擎,因此Docker正在被逐步淘汰。CRI-O和containerd是专为Kubernetes编排和运行容器而构建的(CRI-O将在附录A中介绍)。此外,还有Docker Swarm和Apache MESOS等其他容器编排器。

容器引擎:最初被用来实现将容器化应用程序配置在单个本地节点上运行。普通用户、管理员和开发人员都可以直接启动容器引擎。容器引擎可以作为systemd的一个启动项被启动,也可以通过Kubernetes等容器编排器启动。上文提到CRI-O和containerd这两种容器引擎被Kubernetes用来管理本地容器,实际上这两种容器引擎并不打算让普通用户直接使用。Docker和Podman则是被普通用户用来在单台机器上开发、管理和运行容器化应用程序的两种主要的容器引擎。Podman很少会被用在Kubernetes中启动容器,因此,本书中也不会过多介绍Kubernetes相关的知识。Buildah是另外一种容器引擎,仅用于构建容器镜像。

OCI(开放容器计划)容器运行时:它负责完成Linux内核参数的配置,并最终启动容器化应用程序。最常用的两种容器运行时是runc和crun。Kata和gVisor是另外两种容器运行时。附录B将对各种OCI容器运行时的差异进行说明。

图1-1展示了开源容器项目从属的类别。

图1-1 按编排器、引擎和运行时对不同容器开源项目进行分类

Podman是pod manager的缩写。pod是Kubernetes项目中普遍存在的一个概念。一个pod可以有一个或多个容器,这些容器共享相同的命名空间和控制组(cgroups,用于资源约束)。第4章会更深入地介绍pod。Podman可以用来运行单个容器或者pod。Podman的Logo是一组海豹,如图1-2所示。该图案源自爱尔兰人概念里的美人鱼形象。一组海豹就形成了逻辑概念上的pod。

图1-2 Podman的Logo

Podman项目将Podman描述为“用于在Linux系统上开发、管理和运行OCI容器的无守护进程的容器引擎。容器既可以以特权模式运行,也可以以非特权模式运行”。Podman通常用简单的一行“alias docker=podman”来描述,因为Podman可以使用与Docker相同的命令行来完成Docker所能做的几乎所有事情。但正如你在本书中了解的那样,Podman可以做的还远不止这些。理解Docker对于理解Podman并不是必须的,但会很有帮助。

提示 开放容器计划(Open Container Initiative,OCI)是一个标准化组织,其主要目标是围绕容器格式和运行时建立开放的行业标准。可以通过访问https://opencontainers.org了解更多信息。

Podman的上游项目位于github.com上的Containers项目中,如图1-3所示。在该网页上还包括其他容器库和容器管理工具,如Buildah和Skopeo(有关这些工具的说明,参见附录A)。

如1.2.1节中所描述的那样,Podman支持新的OCI格式的镜像,同时也支持旧的Docker(V2和V1)格式的镜像。Podman可以运行来自诸如docker.io和quay.io等容器镜像注册服务器中的任何镜像,还支持数百个其他容器镜像注册服务器。Podman将这些镜像拉到Linux主机上,然后会以与Docker和Kubernetes类似的方式启动这些镜像。同Docker一样,Podman支持所有类型的OCI运行时,包括runc、crun、Kata和gVisor(见附录B)。

本书旨在帮助Linux管理员了解将Podman用作主要容器引擎的好处。你可以通过本书了解如何在尽可能确保系统配置安全的同时,允许普通用户使用容器。Podman最主要的一个使用场景是在诸如边缘设备这样的单节点环境上运行容器化应用程序。Podman和systemd一起使用可以实现在无须人工干预的情况下管理节点上应用程序的整个生命周期。Podman的目标是可以在Linux上自然地运行容器,从而充分利用Linux平台的所有功能。

提示 可以将Podman安装在Linux的多种发行版以及macOS和Windows平台上。如果你想进一步了解如何在你的平台上获取Podman,请参阅附录C。

图1-3 Containers是Podman和其他相关容器工具的开发者站点

应用程序开发者也是本书的目标读者。对开发者来说,Podman是一种以安全方式实现容器化应用程序的很好的工具。Podman允许开发者在所有Linux发行版中创建Linux容器。此外,Podman也可以在macOS和Windows平台上使用。在这些平台上,它可以通过网络与运行在虚拟机或者Linux机器上的Podman服务进行通信。本书将向你介绍如何使用容器、构建容器镜像,然后将容器化应用程序转换成在边缘设备上运行的单节点服务或者基于Kubernetes的微服务。

Podman和其他一些容器工具都是开源项目,这些项目的贡献者来自全世界不同的公司、大学和组织。当然,这些开源项目也欢迎新的贡献者来优化和改进。要了解有关如何加入这个项目的信息,可以参阅附录D。本章首先简要概述一下容器,然后介绍使Podman成为容器领域非常好的工具的一些核心功能。