![見出し画像](https://assets.st-note.com/production/uploads/images/128686723/rectangle_large_type_2_63924d3c8d0d03ca5807cea37a822d83.png?width=1200)
BuildKit を使用した nerdctl build のセットアップ
はじめに 本文章は、 containerdプロジェクトが公開しているLinuxでコンテナーを操作するためのコマンド nerdctl のマニュアルを独自に翻訳したものです。 オリジナルの著作権はcontainerdプロジェクトが保有しておりApache-2.0ライセンスで頒布されています。本翻訳と編集の著作権は編訳者である三浦が保有しています。オリジナルの英語ドキュメントはこちらで参照できます。
nerdctl build (および nerdctl compose build) は BuildKit に依存しています。 これを使用するには、BuildKit をセットアップする必要があります。
BuildKit には 2 種類のバックエンドがあります。
containerd worker: BuildKit はコンテナやイメージなどの管理を containerd に依存しています。 containerd はホスト上で稼働している必要があります。
OCIワーカー: BuildKitはコンテナやイメージなどを管理します。 containerdは必要ありません。このワーカーは、コンテナーの実行を runc に依存しています。
上記のいずれかのワーカーで BuildKit を設定する必要があります。
OCIワーカーは、containerdによって管理されるベース・イメージ(Dockerfile内のFROMイメージ)にアクセスできないことに注意してください。 したがって、nerdctl build で containerd マネージド イメージを基本イメージとして使用することはできません。 これらには、以前に nerdctl build を使用してビルドされたイメージが含まれます。
たとえば、次のビルド・バーは、以前にビルドされ、コンテナ管理されたイメージfooを使用しようとするため、OCI Workerで失敗します。
$ mkdir -p /tmp/ctx && cat <<EOF > /tmp/ctx/Dockerfile
FROM ghcr.io/stargz-containers/ubuntu:20.04-org
RUN echo hello
EOF
$ nerdctl build -t foo /tmp/ctx
$ cat <<EOF > /tmp/ctx/Dockerfile
FROM foo
RUN echo bar
EOF
$ nerdctl build -t bar /tmp/ctx
この制限は、後述するようにcontainerd workerを使用することで回避できます。
containerd worker を使用した BuildKit のセットアップ
ルートレス
必要条件nerdctl >= 0.18, BuildKit >= 0.10
$ CONTAINERD_NAMESPACE=default containerd-rootless-setuptool.sh install-buildkit-containerd
containerd-rootless-setuptool.sh は envvars CONTAINERD_NAMESPACEとCONTAINERD_SNAPSHOTTERを認識しています。 指定された containerd 名前空間に buildkitd をインストールします。 これにより、BuildKit は、その名前空間の containerd マネージドイメージをベースイメージとして使用できます。 現時点では、BuildKit は他の名前空間のイメージを使用できないことに注意してください。
If CONTAINERD_NAMESPACE envvar is not specified, this script configures buildkitd to use "buildkit" namespace (not "default" namespace).
CONTAINERD_NAMESPACE で名前空間を指定してこのスクリプトを実行することで、別の名前空間に追加の buildkitd プロセスをインストールできます。
CONTAINERD_NAMESPACEが指定されている場合、BuildKit は $XDG_RUNTIME_DIR/buildkit-$CONTAINERD_NAMESPACE/buildkitd.sock でソケットを公開します。 CONTAINERD_NAMESPACEが指定されていない場合、その場所は $XDG_RUNTIME_DIR/buildkit/buildkitd.sock になります。
Rootful
$ sudo systemctl enable --now buildkit
次に、次の構成を /etc/buildkit/buildkitd.toml に追加して、containerd worker を有効にします。
[worker.oci]
enabled = false
[worker.containerd]
enabled = true
# namespace should be "k8s.io" for Kubernetes (including Rancher Desktop)
namespace = "default"
OCI WorkerでのBuildKitの設定
ここから先は
¥ 100
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?