云网牛站
所在位置:首页 > Linux云服务器 > 安装和使用Buildah构建OCI和Docker容器映像

安装和使用Buildah构建OCI和Docker容器映像

2020-06-10 15:23:08作者:雷增线稿源:云网牛站

本文介绍安装和使用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

安装和使用Buildah构建OCI和Docker容器映像

也可以使用podamn:

$  podman images

上面的命令创建一个空容器(无图像),如下安装空容器:

scratchmnt=$(buildah mount $brandnewcontainer)

echo $scratchmnt

/var/lib/containers/storage/overlay/... .../merged

注:... ...为40e7215211b47e8de47991d0dc7be07e0b1b4f48eda25ebaf6ff8ff46c466be5,如下图:

安装和使用Buildah构建OCI和Docker容器映像

Buildah mount命令允许您挂载容器的根文件系统,这使您可以从主机访问它。

接下来,将软件包安装到临时映像中:

yum -y group install "Minimal Install" --releasever=8 --installroot=$scratchmnt

安装软件包后,现在,我们可以卸载映像并将其作为独立的容器运行,因为它具有需要独立的所有内容:

$ buildah umount $brandnewcontainer

e6c2f7b0b5679133ad6e0ad6bd74164dac7f357f0076cf6cc819f9ed664236d5

要将图像作为Continer运行,请在下面提供以下命令,您应该能够直接进入从头创建的新容器中,您可以在其中安装其他应用程序:

$ buildah run $brandnewcontainer bash

[root@e6c2f7b0b567 /]# ls

安装和使用Buildah构建OCI和Docker容器映像

从上面可以看到,所有目录在标准容器中都可以使用,我们可以安装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

安装和使用Buildah构建OCI和Docker容器映像

现在运行图像:

$ podman run -p 8080:80 -d --name apache-server a0c546bc3927

b1d29603542c8f91a289127cee4fa9157962f8fcdda9baa82b335e08a94c0992

为了确保我们的Apache网络服务器正在提供我们之前添加的页面,我们必须做一些事情,我们可以curl,甚至可以使用浏览器查看结果。请记住,容器中的80端口已绑定到系统上的8080端口,我们可以使用curl进行如下所示的测试:

curl -ik "localhost:8080"

安装和使用Buildah构建OCI和Docker容器映像

您可以清楚地看到,Web服务器正在侦听并返回了我们期望的响应。

Buildah附带了许多工具供您使用,您可以删除图像和容器,还可以检查图像和容器。以检查为例,使用“buildah images”命令列出所有图像以获取其ID,然后获取要检查的图像的ID,然后运行:

$ buildah inspect a0c546bc3927

安装和使用Buildah构建OCI和Docker容器映像

安装和使用Buildah构建OCI和Docker容器映像

它应该产生大量信息。

 

结论

Buildah是一个很酷的工具,可以从头开始构建图像,也可以使用其他图像作为基础。您还可以根据需要修改其他图像,从而使其具有通用性和灵活性。

 

相关主题

在Linux系统下使用Docker Compose管理Docker容器

精选文章
热门文章