イメージをビルドする
プロセス内 BuildKit エンジン向けのタスク指向のレシピです。ローカルでもリモート Cornus サーバー上でも実行できます。すべてのフラグとその挙動は cornus build を参照してください。
Dockerfile をビルドして組み込みレジストリへプッシュする
コンテキストディレクトリから -t で指定した名前のイメージをビルドし、対象レジストリへプッシュします。
cornus build -t localhost:5000/app:latest .- 位置指定コンテキストの既定は
.です。既定以外の Dockerfile パスを使う場合は-f docker/Dockerfileを使います (コンテキストからの相対パス)。 --insecure(既定true) はlocalhost:5000のような plain-HTTP レジストリへのプッシュを許可します。
関連ページ: cornus build, レジストリ
プッシュせずにビルドする (--no-push)
イメージだけをビルドし、レジストリには何も残しません。
cornus build -t localhost:5000/app:latest --no-push .- タグを公開せずに Dockerfile を検証したりキャッシュを温めたりするのに便利です。
関連ページ: cornus build
ビルド引数を渡す (--build-arg)
Dockerfile 内の ARG が使用するビルド時の変数を設定します。
cornus build -t localhost:5000/app:latest \
--build-arg VERSION=1.2.3 \
--build-arg COMMIT=$(git rev-parse --short HEAD) .--build-argは繰り返し指定可能で、フラグ 1 つにつきKEY=VALUEを 1 つ指定します。
関連ページ: cornus build
ビルドキャッシュマウントを使う (RUN --mount=type=cache)
パッケージやコンパイラのキャッシュディレクトリをビルド間で永続化します。これは Dockerfile の機能であり、CLI フラグは不要です。
FROM alpine:3.20
RUN --mount=type=cache,target=/var/cache/apk apk add --no-cache curlcornus build -t localhost:5000/app:latest .- キャッシュはビルドエンジン内に存在します。同じホストまたはリモートビルダー上ではビルド間で保持されます。
関連ページ: cornus build
シークレットをビルドに渡す (--secret id=NAME,src=PATH)
シークレットファイルをイメージに焼き込まず、RUN --mount=type=secret のステップにマウントします。
cornus build -t localhost:5000/app:latest \
--secret id=npmrc,src=$HOME/.npmrc .RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci--secretは繰り返し指定可能です。srcを省略すると id が既定になります。- リモートビルド (
--builder) では、シークレットは 9P/WebSocket でサーバーへストリームされ、レイヤーには決して入りません。
関連ページ: cornus build, credentials
SSH エージェントをビルドに転送する (--ssh)
RUN --mount=type=ssh のステップからローカル SSH エージェントにアクセスできるようにします。たとえばプライベートリポジトリを clone する場合に使います。
cornus build -t localhost:5000/app:latest --ssh default .RUN --mount=type=ssh git clone git@github.com:me/private.git--sshは繰り返し指定可能で、defaultまたはID[=SOCKET]を取ります。ソケットが見つからない場合は$SSH_AUTH_SOCKにフォールバックします。
関連ページ: cornus build
名前付きビルドコンテキストを使う (--build-context NAME=パス)
追加のディレクトリをビルドに公開し、ステップが from=NAME でバインドマウントできるようにします。
cornus build -t localhost:5000/app:latest \
--build-context data=./data .RUN --mount=type=bind,from=data,target=/data ./import.sh /data--build-contextは繰り返し指定可能です。リモートビルドではディレクトリがサーバーへストリームされます (既定では先行、--lazy付きでは遅延)。
関連ページ: cornus build
リモートサーバーでビルドし (--builder)、コンテキストを遅延にストリームする (--lazy)
cornus build --builder は Cornus サーバー上でビルドを実行しながら、呼び出し元のコンテキスト、名前付きバインドディレクトリ、シークレット、SSH エージェントを 9P-on-WebSocket でストリーミングします。ビルドは BuildKit ネイティブのままで、キャッシュはサーバー上に残ります。ホストに Docker やビルド権限は不要です。
cornus build --builder ws://build-server:5000/.cornus/v1/build/attach \
-t build-server:5000/app:v1 \
--build-context data=./big-data \
--lazy ./contextDockerfile 内では、ストリームされた入力は通常の buildx マウント (RUN --mount=type=bind,from=data、--mount=type=secret,id=token、--mount=type=ssh) として見えます。呼び出し元の SSH エージェントは type=ssh マウントのために転送されるので、プライベートな依存関係の取得でも鍵が自分のマシンから出ることはありません。
--builderはws:///wss://またはhttp(s)://のベース URL (環境変数CORNUS_BUILDER) を受け取ります。サーバーを指す選択中の接続プロファイルもビルドをリモートに経路しますが、明示的な--builderが優先されます。- 既定では名前付きコンテキストは事前に同期されます。
--lazy(またはCORNUS_LAZY_BUILD) を使うと必要に応じて提供されるため、ビルドが実際に読むバイトだけがネットワークを通過します。20 MB のコンテキストでビルドが 11 バイトだけ読むなら、転送されるのは 11 バイトです。遅延はcontainerdビルドワーカー (CORNUS_BUILD_WORKER=containerd) では対応されません。 type=localでキー付けされたビルドキャッシュはファイルシステムのパスではなく名前を使うため、同じ--cache-to/--cache-fromがローカルビルドとリモートビルドで同一に動きます。
関連ページ: cornus build, リモートクラスターで作業する
リモートビルドキャッシュをインポート / エクスポートする (--cache-to / --cache-from)
レジストリをバックエンドとするキャッシュを使って、マシンや CI の実行をまたいでビルドキャッシュを永続化し、再利用します。
cornus build -t localhost:5000/app:latest \
--cache-to type=registry,ref=localhost:5000/app:cache \
--cache-from type=registry,ref=localhost:5000/app:cache .- どちらのフラグも繰り返し指定可能で、buildx-style 仕様を取ります。
type=localの場合、dest=/src=値はファイルシステムパスではなく engine-managed キーです (省略時は--tagから auto-derived)。そのためローカルビルドとリモートビルドで同じように動きます。
関連ページ: cornus build
クリーンビルドを強制する (--no-cache)
キャッシュ済みのレイヤーをすべて無視し、すべてのステップを最初から再ビルドします。
cornus build -t localhost:5000/app:latest --no-cache .- ビルドを deterministic に再現したい場合や、upstream base-image が変わった後に使います。
関連ページ: cornus build
ルートレスでビルドする (--rootless)
ローカルビルドを root ではなくユーザー名前空間内で実行します。
cornus build -t localhost:5000/app:latest --rootless .CORNUS_ROOTLESSにより server-wide にも設定できます。ホスト上で動作するルートレス user-namespace stack が必要です。
関連ページ: cornus build, セキュリティ