buildah 用Buildah建立小容器

2021-10-08 04:38:06 字數 3648 閱讀 4892

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上 。

經許可重新發布。

翻譯自:

buildah

如何使用 Buildah 構建容器映象

project atomic 通過他們在 open container initiative oci 上的努力創造了乙個名為 buildah 的偉大工具。buildah 能幫助建立 構建和更新,它支援 docker 容器映象以及 oci 相容映象。buildah 處理構建容器映象時無需安裝完整的容器...

使用 Buildah 建立小體積的容器

我最近加入了 red hat,在這之前我在另外一家科技公司工作了很多年。在我的上乙份工作崗位上,我開發了不少不同型別的軟體產品,這些產品是成功的,但都有版權保護。不僅法規限制了我們不能在公司外將軟體共享,而且我們在公司內部也基本不進行共享。在那時,我覺得這很有道理 公司花費了時間 精力和預算用於開發...

用Margin還是用Padding

用margin還是用padding 何時應當使用margin 需要在border外側新增空白時。空白處不需要背景 色 時。上下相連的兩個盒子之間的空白,需要相互抵消時。如15px 20px的margin,將得到20px的空白。何時應當時用padding 需要在border內測新增空白時。空白處需要背...