开始使用 Buildah 管理 Linux 容器

“Docker, Docker, Docker”,这是我们直到最近才使用的。

码头工人 毫无疑问,仍然很受欢迎。 但正如我们在 IT 行业所知道的那样,进化发生得很快。 所以现在我们将听到 Buildah, 波德曼,CRI-O, 斯科佩奥.

如果你想打个比方——我们有各种类型的浆果,如黑莓、蓝莓、覆盆子,但有一天有人决定选择蓝莓。 所以在 Buildah、Podman、CRI-O 中,我决定选择 buildah。 为什么? 因为它和其他容器平台一样有趣。

让我们深入了解 Buildah!

什么是Buildah?

布达赫 是一个命令行工具来构建 开放容器倡议 (OCI) 图像。 它可以与 Docker、Podman、 Kubernetes – 以您最喜欢的容器工具为准!

Buildah 用于创建、构建、管理、运行容器镜像以及容器。

使用 Buildah,您可以从映像或从头开始创建工作容器,您还可以从工作容器或使用 Dockerfile 创建映像。 您可以以 OCI 格式或上游 Docker 格式构建图像。 您可以修改和删除容器和图像。

Buildah 最有趣的地方在于,它不需要守护进程就可以工作。 所以对#bigfatdaemons 说不。 当谈到持续集成和持续交付以构建容器时,没有守护进程特别会产生火花。

没有守护进程也意味着你可以通过 Buildah 消除 Docker 的守护进程来构建容器镜像。 但这并不意味着 Buildah 不能与 Docker 合并。 因为使用 Dockerfile,您可以通过 Buildah 构建、管理和运行您的容器镜像。 印象深刻吧?

在 Linux 上安装 Buildah

让我们看看如何用 Buildah 弄脏你的手。 Buildah 的软件包可用于 Fedora 和 CentOS。 您可以使用 Linux 发行版的包管理器轻松安装它们。 我将在这里列出一些常见的:

安装 Buildah Fedora, 采用

dnf install buildah -y

在 CentOS 或 RedHat 上安装 Buildah:

yum install buildah -y

要在 Ubuntu 和 Debian 上安装 Buildah,您可以使用 官方购电协议 由…提供 原子计划.

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:projectatomic/ppa
sudo apt install buildah

安装 Buildah 后,就可以开始使用它了。

使用 Buildah 的基本命令

下面是一些从 buildah 开始的基本命令。

了解 Buildah 的版本。

buildah --version

最初的任务是从公共或私有存储库中提取容器映像。 拉图像 buildah 使用“来自”变量。 ‘from’ 变量与 Dockerfile 中使用的变量相同。 不同之处在于,在 Docker 中,我们在 Dockerfile 中指定变量“from”,而在 Buildah 中,我们通过命令行传递变量。

buildah from ubuntu

在上面的命令中,Ubuntu 是我的容器镜像。 在输出末尾成功拉取基于 Ubuntu 的映像后,您将看到 – “ubuntu-working-container”。

在您知道您已成功提取图像后,现在您可能希望查看您提取的图像列表。 但在此之前,您可能想知道“这些图像存储在哪里?”。 拉取的图像存储在主机本身上。

buildah images 
 IMAGE NAME                                               IMAGE TAG            IMAGE ID             CREATED AT             SIZE
 docker.io/library/ubuntu                                 latest               94e814e2efa8         Mar 12, 2019 00:20     91.4 MB
 docker.io/library/fedora                                 latest               d09302f77cfc         Mar 12, 2019 00:20     283 MB

如果您已经熟悉 Docker 命令,那么您可能已经注意到 Docker 和 Buildah 命令的相似之处。 为了 example,在 Docker 中查看我们使用 ‘docker images’ 命令的拉取图像列表。

这是查看正在运行的容器列表的命令。 在 Buildah 中,一旦容器镜像拉取完成,该容器就会开始运行。 如果与 Docker 相比,在拉取镜像后,我们需要使用 ‘docker run’ 运行镜像,然后只有容器开始运行。

CONTAINER ID  BUILDER  IMAGE ID     IMAGE NAME                       CONTAINER NAME
 1063320d2dc0     *     94e814e2efa8 docker.io/library/ubuntu:latest  ubuntu-working-container
 978a399e0aa7     *     d09302f77cfc docker.io/library/fedora:latest  fedora-working-container

如果要清理并删除所有正在运行的容器,请谨慎执行以下命令。 因为一旦你执行了这个命令,你的容器就会被移除。 我们在 buildah 中获得的优于 Docker 的特权是,Docker 不允许我们删除正在运行的容器,但 Buildah 可以。 首先使用 Docker 时,我们必须停止容器,然后才能删除镜像。

buildah rm --all

如果您被某些命令卡住,可以使用 –help 选项。

buildah --help

让我们看看 Buildah 的一些用例,从动手实现开始,我们将从简单开始。 一旦你找到了 Buildah 的节奏,你就可以尽情发挥你的创造力,做一些有趣的事情。

建立一个 Apache Web 服务器容器映像 [Hands On]

让我们通过一个样例 Buildah 项目来试试您刚刚学到的知识。

你认为需要什么才能拥有一个 Apache 在容器内运行的 Web 服务器?

当然,一个图像,一个正在运行的容器,还有什么? 好吧,我们需要做的主要事情是——我们需要安装一个 httpd 包装在容器内。 哦! 我们该怎么做? 不用担心。 我会告诉你的。

让我们首先拉取一个 Linux 发行版映像。 选择您最喜欢的。 我已经拉 中央操作系统 基础图像。

buildah from centos

现在在 CentOS 容器中安装 httpd。 您可以使用以下命令执行此操作:

buildah run centos-working-container yum install httpd -y

你会看到像这样的输出 .

我们所做的是,我们甚至没有进入容器就安装了 httpd 包。 这就像在不进入车库的情况下设置自行车的零件。 您可以在上面的命令输出中看到,包已经安装在我们面前。 Buildah 不作弊?

现在,让我们创建自定义 index.html 文件。

echo "Linux Handbook is interesting !" > index.html

将您的自定义文件 index.html 复制到目录路径 /var/www/html

buildah copy centos-working-container index.html /var/www/html/index.html
4e955fea0268518cbaa500409dfbec88f0ecebad28d84ecbe250baed97dba889

您一定想知道 /var/www/html 是从哪里来的? 为什么我们要在那个目录路径下复制 index.html 文件?

当我们安装 httpd 包时,会创建 /var/www/html 目录。 /var/www/html 只是 Web 服务器的默认根文件夹。

为了启动容器,我们需要配置 入口点 为容器。

buildah config --entrypoint "/usr/sbin/httpd -DFOREGROUND" centos-working-container

“-DFOREGROUND”选项与“/usr/sbin/httpd”一起使用来启动httpd。 “-DFOREGROUND”的作用是,它使 httpd/apache 进程在前台而不是后台运行。 httpd 进程不在后台运行的好处是您可以在控制台上看到调试日志。 如果我们不使用“-DFOREGROUND”选项,apache 服务器将启动,然后立即停止。

现在,我们需要保存我们在容器中所做的一切。 提交将为我们完成。

buildah commit centos-working-container  Linux-Handbook

Linux-Handbook 映像可用,您可以将此映像推送到注册表以使用它。

buildah images
IMAGE ID IMAGE NAME CREATED 
AT SIZE
9110ae7f579f docker.io/library/centos:latest 
Mar 31, 2019 14:36 234.7 MB
49bd5ec5be71 docker.io/library/Linux-Handbook:latest 
Apr 4, 2019 17:28 427.7 MB

那么,所有这些都准备好让 Buildah 弄脏你的手了吗?

作者:Servesha Dudhgaonkar