Buildah 初见

Buildah是一个命令行工具,他提供了一种灵活、可脚本编程式的构建容器镜像的功能,并且其构建出的镜像符合OCI(开放容器标准),可以与通过Docker方式构建出的镜像兼容,即通过Buildah构建出的镜像可以通过Docker与Kubernetes运行。Buildah 可以轻松与脚本集成并生成构建流水线,最大优势在于构建镜像的过程不再需要运行Docker的守护进程。

安装

centos

普通安装

 yum -y install buildah

最新版

# CentOS 7
cd /etc/yum.repos.d/
sudo wget https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_7/devel:kubic:libcontainers:stable.repo
sudo yum -y install buildah

# CentOS 8
sudo dnf -y module disable container-tools
sudo dnf -y install 'dnf-command(copr)'
sudo dnf -y copr enable rhcontainerbot/container-selinux
cd /etc/yum.repos.d
sudo wget https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_8/devel:kubic:libcontainers:stable.repo
sudo dnf -y install buildah

# CentOS Stream
sudo dnf -y module disable container-tools
sudo dnf -y install 'dnf-command(copr)'
sudo dnf -y copr enable rhcontainerbot/container-selinux
cd /etc/yum.repos.d
sudo wget https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_8_Stream/devel:kubic:libcontainers:stable.repo
sudo dnf -y install buildah

构建过程

构建容器镜像的第一步是获取基础镜像,这是通过 Dockerfile 中的 FROM 语句完成的。Buildah 以类似的方式处理这个。

buildah from fedora

该命令将拉取 Fedora 的基础镜像并存储在主机上。通过执行以下操作可以检查主机上可用的镜像。

$ buildah images
REPOSITORY                 TAG             IMAGE ID       CREATED         SIZE
localhost/root/lighttpd    latest          930e1d3fc8cb   3 minutes ago   481 MB
docker.io/library/fedora   latest          a368cbcfa678   11 days ago     189 MB
docker.io/library/httpd    latest          ccbcea8a6757   6 weeks ago     171 MB
docker.io/library/nginx    1.19.0-alpine   7d0cdcc60a96   7 weeks ago     22.8 MB

在拉取基础镜像后,有一个该镜像的运行容器实例,这是一个“工作容器”。

以下命令显示正在运行的容器。

buildah containers
CONTAINER ID  BUILDER  IMAGE ID     IMAGE NAME                       CONTAINER NAME
557fe3b7e5a4     *     a368cbcfa678 docker.io/library/fedora:latest  fedora-working-container

Buildah 还提供了一个非常有用的命令来停止和删除当前正在运行的所有容器。

buildah rm --all

完整的命令列表可以使用 --help 选项。

buildah --help

构建一个 Apache Web 服务器容器镜像

命令行构建

使用 Buildah 在 Fedora 基础镜像上安装 Apache Web 服务器,然后复制一个可供服务的自定义 index.html

首先让我们创建自定义的 index.html

echo "Hello Fedora tuling" > index.html

然后在正在运行的容器中安装 httpd 包。

buildah from fedora
buildah run fedora-working-container dnf install httpd -y

index.html 复制到 /var/www/html/

buildah copy fedora-working-container index.html /var/www/html/index.html

配置容器入口点以启动 httpd。

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

commit 命令将容器保存到镜像。

buildah commit fedora-working-container hello-fedora-web

验证镜像是否成功

podman run -dt -p 80:80/tcp  localhost/hello-fedora-web

Dockerfile构建

对应的 Dockerfile 文件如下

FROM fedora

RUN dnf install httpd -y

COPY index.html /var/www/html/index.html

ENTRYPOINT ["/usr/sbin/httpd", "-DFOREGROUND"]

使用 Buildah 从 Dockerfile 构建镜像也很简单,使用 buildah bud替换 docker build

buildah bud -t tuling .

镜像构建完毕后,可以使用 buildah images 命令查看这个新镜像

使用 buildah push 将容器推送到私有仓

results matching ""

    No results matching ""