DUICUO

イメージを構築するためのオープンソース ツールである Buildah について説明します。

1. はじめに

Buildah[1]は、Open Container Initiative (OCI)[2]と互換性のあるコンテナを構築するためのLinuxベースのオープンソースツールです。つまり、コンテナはDocker[3]やKubernetes[4]とも互換性があります。Buildahを使用すると、既存のベースイメージまたは空のイメージから、好みのツールを使用して効率的なコンテナイメージをゼロから作成できます。これは、より柔軟かつ安全なコンテナイメージ構築方法です。

Buildahは、2017年にダニエル・ウォルシュ氏とRed Hatのチームによって開発されました。彼らは、コンテナイメージ用の「coreutils」の開発を目指しました。これは、既存のコンテナホストツールと連携してOCIおよびDocker互換のコンテナイメージを構築できるツールです。構築されたイメージはコンテナリポジトリ[5]に保存され、複数のランタイム環境[6]で利用できるようになります。

2. 特徴

  • Dockerfiles[7]の有無にかかわらずコンテナイメージを構築する(ユーザーがイメージを組み立てるために呼び出すことができるすべてのコマンドを含むテキストドキュメント)
  • コンテナ イメージを最初から作成するか、既存のコンテナ イメージの開始点から作成します。
  • イメージ自体にビルドツールを含めないことで、ビルドされたイメージのサイズが縮小され、セキュリティが向上し、より少ないリソースで転送しやすくなります。
  • Dockerfiles と互換性があり、Docker からの変換が簡単になります。
  • ユーザー固有の画像を作成して、画像を作成したユーザーごとに並べ替えられるようにします。
  • イメージを検査、検証、および変更します。
  • コンテナとイメージをローカル ストレージからパブリックまたはプライベートのリポジトリやライブラリにプッシュします。
  • Docker Hub[8]からイメージをプッシュまたはプルする。
  • コンテナ イメージをローカル ストレージから削除します。
  • 作業コンテナのルート ファイル システムのマウントとアンマウント。
  • コンテナのルート ファイル システムの更新されたコンテンツを、新しいイメージのファイル システム レイヤーとして使用します。

3. ビルダとポッドマン

BuildahとPodman[9]は、OCIイメージとコンテナの使用とビルドのための補完的なオープンソースプロジェクトであり、コマンドラインツールでもあります。Buildahが最初に開発され、PodmanはBuildahと同じコードをビルドに使用しています。しかし、BuildahのコマンドはPodmanよりもはるかに冗長であり、イメージをより細かく制御し、より洗練されたイメージレイヤーを作成できます。Podmanの「build」コマンドは、Buildahの機能のサブセットを使用しています。

Buildahはコンテナイメージの構築に特化しており、デーモンソケットコンポーネントを除いたDockerfile内のすべてのコマンドを再現します。一方、Podmanはコンテナ内でこれらのイメージを保守および変更するために必要な機能に重点を置いています。Podmanでは、Buildahを使用してコンテナイメージを提供し、コンテナを作成した後、使い慣れたコマンドラインインターフェース(CLI)コマンドを使用できます(Docker CLIでコマンドを実行できる場合は、同じコマンドをPodman CLIでも実行できます)。

PodmanとBuildahのもう一つの違いは、Buildahコンテナは主に、作成中のコンテナイメージにコンテンツを転送するために一時的に作成されるのに対し、Podmanでは、ユーザーが長期的な使用とメンテナンスのために設計された従来のコンテナを作成することです。Buildahコンテナは短期的な目的で使用されるのに対し、Podmanコンテナは長期的な目的で使用されるものです。

Buildah と Podman によって作成されたコンテナーは相互に表示されません。

4. インストール

4.1 セントOS

 sudo yum -yビルドをインストールします

4.2 ウブントゥ

 # Ubuntu 20.10以降
sudo apt -get -yアップデート
sudo apt -get -y install buildah

4.3 RHEL7

 sudo サブスクリプション-マネージャーリポジトリ--enable=rhel-7-server-extras-rpms
sudo yum -yビルドをインストールします

4.4 フェドラ

 sudo dnf -yビルドをインストール

または

 $ sudo rpm - ostree インストール buildah
  • 詳しいインストール手順については、このリンク[10]を参照してください。

5. コマンド

指示

説明

ビルドア・アド(1)[11]

ファイル、URL、またはディレクトリの内容をコンテナーに追加します。

ビルドアビルド(1)[12]

Containerfiles または Dockerfiles の指示に従ってイメージをビルドします。

ビルドコミット(1)[13]

実行中のコンテナからイメージを作成します。

ビルドアコンフィグ(1)[14]

画像の構成設定を更新します。

ビルドアコンテナ(1)[15]

作業コンテナとそのベースイメージを一覧表示します。

ビルドアコピー(1)[16]

ファイル、URL、またはディレクトリの内容をコンテナの作業ディレクトリにコピーします。

ビルドア・フロム(1)[17]

新しい作業コンテナを最初から作成するか、指定されたイメージを開始点として使用して作成します。

ビルドア画像(1)[18]

ローカルストレージ内の画像を一覧表示します。

ビルドア・インフォ(1)[19]

Buildah システム情報を表示します。

ビルドア・インスペクト(1)[20]

コンテナまたはイメージの構成を確認します。

ビルダマウント(1)[21]

作業コンテナのルート ファイル システムをマウントします。

ビルドアプル(1)[22]

指定された場所からイメージを取得します。

ビルドア・プッシュ(1)[23]

ローカル ストレージから別の場所にイメージをプッシュします。

ビルドア・リネーム(1)[24]

ローカルコンテナの名前を変更する

ビルドア・rm(1)[25]

1 つ以上の作業コンテナを削除します。

ビルドア・ルミ(1)[26]

1 つ以上のミラーを削除します。

ビルドア・ラン(1)[27]

コンテナ内でコマンドを実行します。

ビルドアタグ(1)[28]

ローカルミラーに追加の名前を追加します。

ビルドア・アンマウント(1)[29]

作業コンテナのルート ファイル システムをアンロードします。

ビルドア・アンシェア(1)[30]

変更された ID マッピングを使用して、ユーザー名前空間でコマンドを起動します。

ビルドア版(1)[31]

Buildahのバージョン情報を表示する

6. 例

エイリアスを設定する

 $ vim /root/.bashrc
エイリアス p = 'podman'
エイリアス b = 'buildah'
エイリアス s = 'skopeo'

6.1 コマンドラインからhttpdイメージを構築する

最初のステップは、ベースイメージを抽出し、作業コンテナを作成することです。

 fedoraからの$ buildah
Fedora -作業-コンテナ

$ b ps
コンテナID ビルダーイメージID イメージ名 コンテナ名
89704476 b76a * 885 d2b38b819 レジストリ.fedoraproject .org / fe... fedora -動作中-コンテナ

作業コンテナにパッケージを追加する

 buildah run fedora -動作中-コンテナ dnf install httpd - y

特定のコンテンツを含む Web サーバーの作業ディレクトリを作成します。

 mkdir デモ- httpd && cd デモ- httpd && echo 'サンプルコンテナ' > index .html

ローカルファイルを作業コンテナにコピーする

 buildah コピー fedora -動作中-コンテナ index .html / var / www / html / index .html

アプリケーションを起動するためのコンテナ エントリ ポイントを定義します。

 buildah config --entrypoint "/usr/sbin/httpd -DFOREGROUND" fedora 作業コンテナ

設定後、イメージを保存します。

 buildah コミット fedora -動作中-コンテナ fedora - myhttpd

ローカルミラーの一覧

 $ ビルドア画像
リポジトリタグイメージID作成サイズ
localhost / fedora - myhttpd 最新 e1fb00a4662b 43秒前434 MB

新しく生成されたイメージを使用して、podman を使用してコンテナをローカルで実行できるようになりました。

ポッドマン実行- tid fedora - myhttpd

テスト

 $ p exec -ti heuristic_solomon curl http : //ローカルホスト
サンプル容器

イメージをローカル Docker リポジトリにプッシュするには、次の手順を実行します。

 #倉庫にログイン
$ buildah ログイン-uレジストリユーザー-pレジストリユーザーパスワード192.168 .10 .80 : 5000
ログインに成功しました!
#押す
$ buildah push fedora - myhttpd docker : // 192.168 .10 .80 : 5000 / testuser / fedora - myhttpd :最新
画像ソース署名の取得
blob d4222651a196 のコピーが完了しました
blob cc6656265656 のコピーが完了しました
設定e1fb00a466のコピーが完了しました
マニフェストをイメージの保存先に書き込む
署名の保存

次のようにすることもできます:

 buildah push --creds registryuser:registryuserpassword fedora-myhttpd docker://192.168.10.80:5000/testuser/fedora-myhttpd:latest

Skopeoの検査結果

 $ skopeo inspect docker : // 192.168 .10 .80 : 5000 / testuser / fedora - myhttpd :最新

6.2 Dockerfileビルド

 $ mkdir fedora - http - server && cd fedora - http - server
$ ナノ Dockerfile
 # 最近リリースされた Fedora をベース
fedoraから最新
メンテナー ipbabble メール buildahboy@redhat .com #実際のメールではありません

# アップデートhttpdをインストールする
RUN echo "すべてのFedoraパッケージを更新しています" ; dnf -y update ; dnf -y clean all
RUN echo "httpdをインストールしています" ; dnf -y install httpd && dnf -y clean all

# デフォルトのhttpdポート80を公開する
エクスポーズ80

# httpd を実行する
コマンド[ "/usr/sbin/httpd" , "-DFOREGROUND" ]

終了するには CTRL+X を押し、保存するには Y を押し、nano を終了には Enter を押します。

建てる

 buildah bud - t fedora - http -サーバー

コンテナの実行

 podman run -p 8080 : 80 - tid fedora - http -サーバー
ポッドマン PS

テストアクセス

 curl ローカルホスト: 8080

6.3 イメージ構築スクリプト(Dockerfileの代わりに)

  • ビルド_buildah_upstream.sh
 # !/ usr / bin / env bash
# build_buildah_upstream .sh
#
ctr = $ ( fedorabuildah )
buildah config --env GOPATH=/root/buildah $ctr
buildah 実行 $ctr / bin / sh - c 'dnf -y install --enablerepo=updates-testing \
作る \
golang \
コウモリ\
btrfs-progs-devel \
デバイスマッパー開発\
glib2-devel \
gpgme-devel \
libassuan-devel \
libseccomp-devel \
git \
bzip2 \
go-md2man \
ランク \
fuse-overlayfs \
ヒューズ3 \
コンテナ共通; \
mkdir -p /root/buildah; \
git クローン https://github.com/containers/buildah /root/buildah/src/github.com/containers/buildah; \
cd /root/buildah/src/github.com/containers/buildah; \
作る; \
インストールします。\
rm -rf /root/buildah/*; \
dnf -y バットを削除 git golang go-md2man make; \
DNFクリーンオール

buildah 実行 $ctr -- sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' /etc/containers/storage.conf

buildah を実行して $ctr / bin / sh - c 'mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock' を実行します。

buildah config --env _BUILDAH_STARTED_IN_USERNS="" --env BUILDAH_ISOLATION=chroot $ctr
buildah コミット $ctr buildahupstream

イメージをビルドします。

 chmod 755 build_buildah_upstream .sh
./build_buildah_upstream .sh

コンテナの実行:

 $ podman run buildahupstream buildah バージョン
$ podman run buildahupstream bash - c "busybox からの buildah; buildah イメージ"

参照:

  • Buildahでイメージを構築する[32]
  • Buildahを使ったビルド:Dockerfiles、コマンドライン、スクリプト[33]

参考リンク

[1] ビルドア:https://buildah.io/

[2] コンテナ: https://www.redhat.com/en/topics/containers/whats-a-linux-container

[3] Docker: https://www.redhat.com/en/topics/containers/what-is-docker

[4] Kubernetes: https://www.redhat.com/en/topics/containers/what-is-kubernetes

[5] コンテナレジストリ: https://www.redhat.com/en/topics/cloud-native-apps/what-is-a-container-registry

[6] ランタイム環境: https://www.redhat.com/en/topics/cloud-native-apps/what-is-a-Java-runtime-environment

[7] Dockerfiles: https://blog.csdn.net/xixihahalelehehe/article/details/107517710

[8] Dockerハブ: https://hub.docker.com/

[9] ポッドマン:https://podman.io/

[10] インストール手順の詳細については、次のリンクを参照してください:https://github.com/containers/buildah/blob/main/install.md

[11] buildah-add(1): /https://github.com/containers/buildah/blob/main/docs/buildah-add.1.md

[12] buildah-build(1): https://github.com/containers/buildah/blob/main/docs/buildah-build.1.md

[13] buildah-commit(1): https://github.com/containers/buildah/blob/main/docs/buildah-commit.1.md

[14] buildah-config(1): https://github.com/containers/buildah/blob/main/docs/buildah-config.1.md

[15] buildah-containers(1): https://github.com/containers/buildah/blob/main/docs/buildah-containers.1.md

[16] buildah-copy(1): https://github.com/containers/buildah/blob/main/docs/buildah-copy.1.md

[17] buildah-from(1): https://github.com/containers/buildah/blob/main/docs/buildah-from.1.md

[18] buildah-images(1): https://github.com/containers/buildah/blob/main/docs/buildah-images.1.md

[19] buildah-info(1): https://github.com/containers/buildah/blob/main/docs/buildah-info.1.md

[20] buildah-inspect(1): https://github.com/containers/buildah/blob/main/docs/buildah-inspect.1.md

[21] buildah-mount(1): https://github.com/containers/buildah/blob/main/docs/buildah-mount.1.md

[22] buildah-pull(1): https://github.com/containers/buildah/blob/main/docs/buildah-pull.1.md

[23] buildah-push(1): https://github.com/containers/buildah/blob/main/docs/buildah-push.1.md

[24] buildah-rename(1): https://github.com/containers/buildah/blob/main/docs/buildah-rename.1.md

[25] buildah-rm(1): https://github.com/containers/buildah/blob/main/docs/buildah-rm.1.md

[26] buildah-rmi(1): https://github.com/containers/buildah/blob/main/docs/buildah-rmi.1.md

[27] buildah-run(1): https://github.com/containers/buildah/blob/main/docs/buildah-run.1.md

[28] buildah-tag(1): https://github.com/containers/buildah/blob/main/docs/buildah-tag.1.md

[29] buildah-umount(1): https://github.com/containers/buildah/blob/main/docs/buildah-umount.1.md

[30] buildah-unshare(1): https://github.com/containers/buildah/blob/main/docs/buildah-unshare.1.md

[31] buildah-version(1): https://github.com/containers/buildah/blob/main/docs/buildah-version.1.md

[32] Buildahを使用したイメージの構築: https://docs.oracle.com/en/operating-systems/oracle-linux/podman/podman-BuildingImagesWithBuildah.html#buildah-containers

[33] Buildahを使ったビルド:Dockerfiles、コマンドライン、スクリプト: https://www.redhat.com/sysadmin/building-buildah