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
将容器推送到私有仓