見出し画像

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の設定

ここから先は

847字

¥ 100

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?