5.2. 构建一个简单容器
您对应用程序有了一个想法,想要对其进行容器化。
首先,您需要一个用于构建容器的工具,如 buildah 或 docker,还需要一个描述容器中内容的文件,通常是 Dockerfile。
接下来,您需要一个位置来推送生成的容器镜像,以便可以将它拉取到您想要它运行的位置。这个位置就是容器 registry。
大多数 Linux 操作系统上都会默认安装各个组件的一些示例,但 Dockerfile 除外,需要您自己提供。
下图显示了构建和推送镜像的流程:
图 5.1. 创建简单容器化应用程序并将其推送到 registry
如果您使用运行 Red Hat Enterprise Linux (RHEL) 作为操作系统的计算机,则容器化应用程序创建过程需要以下几个步骤:
- 安装容器构建工具:RHEL 包含一组工具,其中包括用于构建和管理容器的 podman、buildah 和 skopeo。
-
创建一个 Dockerfile 来组合基础镜像和软件:有关构建容器的信息存放在名为
Dockerfile
的文件中。在这个文件中,您要标识从中构建的基本镜像、要安装的软件包,以及要复制到容器中的软件。您还要标识参数值,如公开到容器外部的网络端口和挂载到容器内的卷。将您的 Dockerfile 和您要容器化的软件放到 RHEL 系统上的目录中。 -
运行 buildah 或 docker 构建:运行
buildah build-using-dockerfile
或docker build
命令,将您选择的基础镜像拉取到本地系统,再创建一个存储在本地的容器镜像。 您还可以使用 buildah,在不用 Dockerfile 的前提下构建容器镜像。 -
标记(tag)并推送到 registry:向新容器镜像添加标签 (tag),以标识要在其中存储和共享容器的 registry 位置。然后,通过运行
podman push
或docker push
命令将该镜像推送到 registry。 -
拉取并运行镜像:从具有 podman 或 docker 等容器客户端工具的任何系统,运行用于标识新镜像的命令。例如,运行
podman run <image_name>
或docker run <image_name>
命令。其中,<image_name>
是新容器镜像的名称,类似于quay.io/myrepo/myapp:latest
。registry 可能需要凭证才能推送和拉取镜像。
如需更多有关构建容器镜像、将其推送到 registry 并运行它们的过程的详细信息,请参阅使用 Buildah 自定义镜像构建。
5.2.1. 容器构建工具选项
使用 buildah、podman 和 skopeo 构建和管理容器会导致行业标准容器镜像中包含专门为在 OpenShift Container Platform 或其他 Kubernetes 环境中部署容器而调整的功能。这些工具是无守护进程的,可在没有 root 权限的情况下运行,运行它们所需的开销更少。
Kubernetes 1.20 中弃用了对 Docker Container Engine 作为容器运行时的支持,并将在以后的发行版本中删除。但是,Docker 生成的镜像将继续在集群中使用所有运行时,包括 CRI-O。如需更多信息,请参阅 Kubernetes 博客公告。
最终在 OpenShift Container Platform 中运行容器时,您要使用 CRI-O 容器引擎。CRI-O 在 OpenShift Container Platform 集群中的每一 worker 和 control plane 机器(也称为 master 机器)上运行,但 CRI-O 尚不支持作为 OpenShift Container Platform 外的独立运行时。