概述
Buildah 是一款基于 Linux 的开源工具,用于构建兼容开放容器计划(OCI)的容器;这意味着,这些容器同样也与 Docker 和 Kubernetes 兼容。借助 Buildah,您可以使用熟悉的工具从现有基础镜像创建高效的容器镜像,或者使用空白镜像从头开始构建。它能让您更加灵活、更加安全地构建容器镜像。本文将详细介绍如何实现。
Buildah(名字来源于波士顿口音的“builder”一词)是红帽的 Daniel Walsh 及其团队于 2017 年创造的。当时,他们打算创造一个容器镜像“核心工具包”,与现有容器主机工具搭配使用,以便构建与 OCI 和 Docker 兼容的容器镜像。他们希望这些镜像之后可以存储在容器镜像仓库中并在多个运行时环境中使用,无论是否借助 Docker 等所带的容器守护进程(这需要 root 访问权限,并且生成的容器也会依赖于守护进程本身的功能)。
于是,Buildah 便应运而生,这款命令行工具有以下特点:
- 在构建容器时可以使用或不使用 Dockerfile(一种文本文件,含有用户在组装镜像时可以调用的所有命令)。
- 既可以从头开始创建容器镜像,也可以在现有容器镜像的基础上来创建。
- 不在镜像本身中包含构建工具,不仅可以缩减所构建镜像的大小,提升安全,而且会因为使用更少的资源而减轻传输负担。
- 与 Dockerfile 兼容,从而能从 Docker 轻松转换。
- 创建特定于用户的镜像,因此能够按照创建镜像的人来分门别类。
为何选择 Buildah?
Buildah 可以带来出众的灵活性,让您无需 Dockerfile 就能构建镜像,更轻松地将其他脚本语言整合进构建过程;也能兼顾效率,使用镜像外的构建工具来创建镜像。因此,这款工具不仅能够加快创新速度,还能让新的概念化为现实。用户可以快速创建容器镜像并以之为基础进行构建,只需必要的工具和流程来准备就绪和运行便可。
Buildah 还能为您提供以下助力:
- 检查、验证和修改镜像
- 将容器和镜像从本地存储推送到公共或私有的镜像仓库或存储库
- 将镜像推送到 Docker Hub 或从中提取
- 移除本地存储的容器镜像
- 挂载或卸载有效容器的根文件系统
- 将容器根文件系统的更新内容用作新镜像的文件系统层
Buildah 和 Podman
Buildah 和 Podman 是相辅相成的开源项目和命令行工具,都可操作和构建 OCI 镜像和容器。Buildah 诞生在前,而 Podman 使用了与 Buildah 相同的代码来进行构建。不过,相较于 Podman,Buildah 的命令要细致得多,能够对镜像进行更精细的控制,并可创建更加细化的镜像层。Podman 的“build”命令使用 Buildah 功能的一个子集。
Buildah 专门用于构建容器镜像,复制 Dockerfile 中除守护进程套接字组件之外的所有命令,而 Podman 则擅长维护和修改容器中镜像所需的工作。使用 Podman 时,您可以创建容器(使用 Buildah 来提供容器镜像),然后在生产环境中使用熟悉的命令行接口(CLI)命令来运行、维护和修改您创建的容器(如果您能够在 Docker CLI 中运行某个命令,那么也能在 Podman CLI 中运行同样的命令)。
Podman 和 Buildah 两者的另一区别在于:Buildah 的容器主要是为临时目的而创建的,以便将内容传输到所创建的容器镜像;而使用 Podman 时,用户创建的是将要在更长时间里使用和维护的传统容器。Buildah 的容器主要满足短期用途,而 Podman 的容器则是为长期运行而生。
还有一点,Buildah 和 Podman 不共享容器的内部表述内容,因此一个容器只能在其中一个工具内看到。不过,两者却会共享容器镜像的内部表述内容,在其中一者创建、修改或提取的容器镜像也可在另一者查看和使用。
为什么选择红帽?
Buildah 诞生于红帽,是红帽工程师和开发人员联合开发的一款实用工具,旨在为节省时间和提升效率提供一种有用的方式。与 Podman 和 Skopeo 一样,Buildah 适合使用 Linux 容器的任何用户,且升级红帽企业 Linux 可确保您随时可以充分利用所有工具。对于容器和 Kubernetes,红帽从操作系统到自动化都能为您全程护航。
红帽对容器和 Kubernetes 有深厚的知识基础和丰富的实践经验。我们提供的产品和服务能确保您以正确方式制定和执行容器战略。无论您是想为团队提供容器化开发平台、在一流操作系统上运行容器基础架构,还是想为容器生成的大量数据寻找适合的存储解决方案,红帽解决方案都能满足您的独特需求。