当前位置: 首页 > 工具软件 > Buildah > 使用案例 >

buildah_用Buildah创建小容器

孔正文
2023-12-01

buildah

在另一家科技公司工作多年后,我最近加入了Red Hat。 在上一份工作中,我开发了许多成功但专有的不同软件产品。 在法律上,我们不仅被迫不在公司外部共享软件,而且我们甚至经常不在公司内部共享软件。 当时,这对我完全有意义:公司花了时间,精力和预算来开发该软件,因此他们应该保护并要求获得它的回报。

一年前,当我加入Red Hat并发展出一种完全不同的心态时。 我跳入的第一件事是Buildah项目 。 它有助于构建开放容器计划(OCI)图像,并且特别擅长允许您定制所创建图像的大小。 那时Buildah尚处于初期阶段,那里到处都有一些疣尚未完全投入生产。

作为该项目的新手,我做了一些小的更改,然后问公司内部git存储库在哪里,以便我可以进行更改。 答案:没有内在的东西,只需将您的更改推送到GitHub。 我很困惑-将更改发送到GitHub意味着任何人都可以查看该代码并将其用于自己的项目。 另外,代码仍然有一些缺陷,因此看起来似乎违反直觉。 但是,作为新手,我惊讶地摇了摇头,并提出了更改。

Buildah图像不那么小? ,由Tim Dudgeon(@tdudgeon)提出。 总而言之,他指出,尽管Buildah映像不包含他在Docker映像中看到的多余“绒毛”,但Buildah创建的映像比Docker创建的映像更大。

为了比较,他首先做了:



   
   
$ docker pull centos:7
$ docker images
REPOSITORY            TAG              IMAGE ID                 CREATED             SIZE
docker.io/centos          7                   2d194b392dd1        2 weeks ago         195 MB

他指出,Docker映像的大小为195MB。 然后,Tim使用Buildah创建了一个最小的(临时)映像,并使用以下脚本仅将coreutilsbash软件包添加到了映像中:



   
   
$ cat  ./buildah-base.sh
#!/bin/bash

set -x

# build a minimal image
newcontainer=$(buildah from scratch)
scratchmnt=$(buildah mount $newcontainer)

# install the packages
yum install --installroot $scratchmnt bash coreutils --releasever 7 --setopt install_weak_deps=false -y
yum clean all -y --installroot $scratchmnt --releasever 7

sudo buildah config --cmd /bin/bash $newcontainer

# set some config info
buildah config --label name=centos-base $newcontainer

# commit the image
buildah unmount $newcontainer
buildah commit $newcontainer centos-base

$ sudo ./buildah-base.sh

$ sudo buildah images
IMAGE ID               IMAGE NAME                                             CREATED AT            SIZE
8379315d3e3e     docker.io/library/centos-base:latest           Mar 25, 2018 17:08   212.1 MB

Tim想知道为什么镜像要大17MB,因为Buildah镜像中没有安装pythonyum ,而Docker镜像中却安装了pythonyum 。 这一点在GitHub问题中引起了很大的讨论,因为这根本不是预期的结果。

这次讨论的最大好处是,不仅红帽人员参与其中,而且其他一些人也参与其中。 尤其是,GitHub用户@pixdrift领导了很多精彩的讨论和调查,他指出,文档和区域归档已在Buildah映像中占用了超过100MB的空间。 Pixdrift建议在yum安装程序中强制使用语言环境,并通过以下更改提供此更新的buildah-bash.sh脚本:



   
   
#!/bin/bash

set -x

# build a minimal image
newcontainer=$(buildah from scratch)
scratchmnt=$(buildah mount $newcontainer)

# install the packages
yum install --installroot $scratchmnt bash coreutils --releasever 7 --setopt=install_weak_deps=false --setopt=tsflags=nodocs --setopt=override_install_langs=en_US.utf8 -y
yum clean all -y --installroot $scratchmnt --releasever 7

sudo buildah config --cmd /bin/bash $newcontainer

# set some config info
buildah config --label name=centos-base $newcontainer

# commit the image
buildah unmount $newcontainer
buildah commit $newcontainer centos-base

当Tim运行这个新脚本时,映像大小缩小到92MB,比原来的Buildah映像大小减少了120MB,并接近预期的大小; 但是,作为工程师,工程师仅节省56%的尺寸是不够的。 讨论进一步进行,涉及如何删除单个区域设置包以节省更多空间。 要查看讨论的更多详细信息,请单击Buildah图像。 链接。 谁知道呢?也许您会获得有用的提示,或者更好的是成为Buildah的贡献者。 附带说明一下,该解决方案说明了如何使用Buildah软件来快速轻松地创建最小尺寸的容器,该容器仅装有有效执行工作所需的软件。 另外,它不需要运行守护程序。

这个图像大小问题对我来说是开源软件的强大功能。 来自不同公司的许多人在一天多的时间里通过公开讨论合作解决了一个问题。 尽管没有针对此特定问题创建任何代码更改,但是Red Hat之外的贡献者为Buildah进行了许多代码贡献,这有助于使项目变得更好。 这些贡献使人们能够比以前将代码作为私有git存储库中的专有软件来查看代码的方式更多。 将我转换为开源方式仅用了一年时间,而且我认为我永远也回不去。

本文最初发布在Project Atomic上 经许可重新发布。

翻译自: https://opensource.com/article/18/5/containers-buildah

buildah

 类似资料: