本文介绍安装和使用Buildah构建OCI和Docker容器映像的方法。Buildah是一个命令行工具,可用于构建符合Open Container Initiative(OCI)的映像,它可以与Docker、Podman、Kubernetes或任何您喜欢的容器工具一起使用。Buildah的命令类似于您在Dockerfile中可以找到的所有命令,Buildah的目标还在于提供一个较低级别的coreutils接口来构建容器映像,从而使人们无需Dockerfile即可构建容器。使用Buildah的最强大方法是编写Bash脚本来创建映像,其方式类似于无需守护程序即可编写Dockerfile。
安装Buildah 在CentOS 8系统中运行以下命令以安装Buildah,我们将再安装Podman,以便可以使用它从头开始运行映像: sudo dnf update sudo dnf -y install buildah podman 参考:在CentOS 8/RHEL 8系统上安装和使用Podman的方法。 检查是否已成功安装: $ rpm -q buildah buildah-1.11.6-4.module_el8.1.0+272+3e64ee36.x86_64
使用Buildah从头开始创建OCI映像 在这里,我们将构建一个仅包含少量容器元数据的映像,然后添加运行简单的Apache Web服务器所需的所有内容,这样做可以使您逐块构建容器映像。 我们使用buildah scratch命令来实现这一点,为了避免出现问题,我们将使用“root”用户帐户从此处开始: brandnewcontainer=$(buildah from scratch) $ buildah containers
也可以使用podamn: $ podman images 上面的命令创建一个空容器(无图像),如下安装空容器: scratchmnt=$(buildah mount $brandnewcontainer) echo $scratchmnt /var/lib/containers/storage/overlay/... .../merged 注:... ...为40e7215211b47e8de47991d0dc7be07e0b1b4f48eda25ebaf6ff8ff46c466be5,如下图:
Buildah mount命令允许您挂载容器的根文件系统,这使您可以从主机访问它。 接下来,将软件包安装到临时映像中: yum -y group install "Minimal Install" --releasever=8 --installroot=$scratchmnt 安装软件包后,现在,我们可以卸载映像并将其作为独立的容器运行,因为它具有需要独立的所有内容: $ buildah umount $brandnewcontainer e6c2f7b0b5679133ad6e0ad6bd74164dac7f357f0076cf6cc819f9ed664236d5 要将图像作为Continer运行,请在下面提供以下命令,您应该能够直接进入从头创建的新容器中,您可以在其中安装其他应用程序: $ buildah run $brandnewcontainer bash [root@e6c2f7b0b567 /]# ls
从上面可以看到,所有目录在标准容器中都可以使用,我们可以安装Apache来测试一切是否正常: [root@e6c2f7b0b567 /]# yum install httpd -y 在默认的Apache文档根目录中添加一个简单的html页面,然后从容器中退出: [root@e6c2f7b0b567 /]# echo "Testing Apache." > /var/www/html/index.html [root@e6c2f7b0b567 /]# exit 返回我们的主机系统,而不是将httpd作为初始化服务运行,而是设置一些buildah config选项来直接从容器中运行httpd守护程序: $ buildah config --cmd "/usr/sbin/httpd -DFOREGROUND" working-container $ buildah config --port 80/tcp working-container $ buildah commit working-container localhost/firstapache:latest Getting image source signatures Copying blob b34ab2705c68 done Copying config a0c546bc39 done Writing manifest to image destination Storing signatures a0c546bc39271565946d11a843979e017aae73e2b792cc5d9ca589661f427543 在buildah提交完映像后,让我们现在操作Podman使其运行如下。 首先,检查系统中所有可用的图像并获取我们感兴趣的图像的ID: $ podman images
现在运行图像: $ podman run -p 8080:80 -d --name apache-server a0c546bc3927 b1d29603542c8f91a289127cee4fa9157962f8fcdda9baa82b335e08a94c0992 为了确保我们的Apache网络服务器正在提供我们之前添加的页面,我们必须做一些事情,我们可以curl,甚至可以使用浏览器查看结果。请记住,容器中的80端口已绑定到系统上的8080端口,我们可以使用curl进行如下所示的测试: curl -ik "localhost:8080"
您可以清楚地看到,Web服务器正在侦听并返回了我们期望的响应。 Buildah附带了许多工具供您使用,您可以删除图像和容器,还可以检查图像和容器。以检查为例,使用“buildah images”命令列出所有图像以获取其ID,然后获取要检查的图像的ID,然后运行: $ buildah inspect a0c546bc3927
它应该产生大量信息。
结论 Buildah是一个很酷的工具,可以从头开始构建图像,也可以使用其他图像作为基础。您还可以根据需要修改其他图像,从而使其具有通用性和灵活性。
相关主题 |