7月16日に ビルドキット0.9.0をリリースしました。 ドッカービルドx 0.6.0, Dockerfile 1.3.0 および Dockerfile 1.3.0-labs.これらのリリースには、バグ修正、機能パリティの改善、リファクタリング、および新機能が含まれています。
ドッカーファイルの新機能
取り付け
インストールは必要ありません:BuildKit は、コンテナイメージからのフロントエンドの動的な読み込みをサポートしています。 Dockerfile フロントエンドのイメージは、 docker/dockerfile リポジトリで入手できます。
外部フロントエンドを使用するには、Dockerfile の最初の行が、使用する特定のイメージを指している必要があります。
# syntax=docker/dockerfile:1.3
詳細情報: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md
RUNコマンドがフラグをサポートする --network
ようになりました
RUN コマンドは、特定のタイプのネットワーク条件(ホスト、なし、デフォルト)を要求するためのフラグをサポートします --network
。これにより、ユーザーは Docker ビルド中にすべてのネットワークを無効にしてネットワークが使用されないようにしたり、ホスト ネットワークを明示的に使用することをオプトインしたりできます。
--network=host
ネットワーク.ホスト のエンタイトルメントを許可する必要があります。この機能は、以前はラボ チャネルでのみ使用できました。
# syntax=docker/dockerfile:1.3
FROM python:3.6
ADD mypackage.tgz wheelz/
RUN --network=none pipe install --find-links wheels mypackage
RUN --mount
フラグ変数の展開
RUN --mount
フラグ の値は、 from フィールドを除き、変数展開をサポートするようになりました。
# syntax=docker/dockerfile:1.3
FROM golang
...
ARG GO_CACHE_DIR=/root/.cache/go-build
RUN --mount=type=cache,target=$GO_CACHE_DIR go build ...
ここのドキュメントの構文
RUN コマンドと COPY コマンドで Here-document 構文 がサポートされるようになり、&& と \ をあまり使わずに複数行のインライン スクリプトとファイル (labs チャネル) を記述できるようになりました。
以前は:
# syntax=docker/dockerfile:1.3
FROM debian
RUN apt-get update \
&& apt-get install -y vim
新しいヒアドキュメント構文の場合:
# syntax=docker/dockerfile:1.3-labs
FROM debian
RUN <<eot bash
apt-get update
apt-get install -y vim
eot
COPYコマンドでは、ソースパラメータをhere-docインジケータに置き換えることができます。 通常の here-doc 変数展開とタブストリッピングルール が適用されます。
# syntax=docker/dockerfile:1.3-labs
FROM alpine
ARG FOO=bar
COPY <<-eot /app/foo
hello ${FOO}
eot
ビルドキットリポジトリに関する詳細情報。
OpenTracing プロバイダーが OpenTelemetry のサポートに置き換えられました
OpenTelemetryはOpenTracingに取って代わりました。 APIは非常に似ていますが、追加のコレクターエンドポイントにより、将来クライアントまたはコンテナからトレースを転送できるようになります。
JAEGER_TRACE env は以前と同様にサポートされています。 OTEL コレクタは、 grpc と HTTP プロトスの両方でサポートされています。
また、Buildx からのクロスプロセス トレースを使用できるのはこれが初めてです。
# create jaeger container
$ docker run -d --name jaeger \
-p 6831:6831/udp -p 16686:16686 \
jaegertracing/all-in-one
# create builder with JAEGER_TRACE env
$ docker buildx create \
--name builder \
--driver docker-container \
--driver-opt network=host \
--driver-opt env.JAEGER_TRACE=localhost:6831 \
--use
# open Jaeger UI at http://localhost:16686/ and see results as shown below
リソース制限
ユーザーは BuildKit ソルバーの並列処理を制限できるようになり、 Buildkitd 構成では、BuildKit ソルバーの並列処理を制限するための最大並列処理が可能になり、低電力マシンで特に役立ちます。
GitHub アクションでこれを行う場合の例を次に示します。
また、TCP 接続をレジストリごとに 4 つに制限し、レイヤーのプルとプッシュに使用しない追加の接続を使用します。 この制限により、ホストごとにTCP接続を管理して、イメージのプル中にビルドがスタックするのを防ぐことができます。 追加の接続は、全体的なビルド時間を増やすために、メタデータ要求 (イメージ構成の取得) に使用されます。
GitHub Actions キャッシュバックエンド (実験的)
GitHub アクションでの Docker ビルドを高速化するために、新しい実験的な GitHub キャッシュ バックエンド をリリースしました。
これは、公式のアクション/キャッシュアクションをローカルキャッシュエクスポーター/ インポーターと一緒に使用してビルドキャッシュを再利用する以前の非効率的な方法を解決しますが、キャッシュを毎回保存/ロードする必要があり、BLOBごとに追跡が行われないため、非効率的です。
この実験的なキャッシュの使用を開始するには、 ビルドプッシュアクションリポジトリの例を使用します。
Git の機能強化
既定のブランチ名が、Git コンテキストを使用するときにリモートから正しく検出されるようになりました。
Git ソースからビルドする際のサブディレクトリのサポートがリリースされました。
$ docker buildx build git://github.com/repo:path/to/subapp
SSH エージェントは、SSH Git URL からビルドするときに自動的に転送されます。
$ docker buildx build [email protected]:myrepo.git
新しいプラットフォームと QEMU の更新
- Risc-V (buildkitd, buildctl, buildx, frontends)
- Windows ARM64 (buildctl, buildx)
- MacOS ARM64 (buildctl)
また、組み込みQEMUエミュレータがv6.0.0に更新され、追加のプラットフォームにエミュレーションを提供します。
--metadata-file
ビルドCTLおよびビルドXの場合
--metadata-file
buildx の build および bake コマンドに新しいフラグが追加され、 ビルド結果のメタデータを JSON 形式で保存できるようになりました。
$ docker buildx build --output type=docker --metadata-file ./metadata.json .
{
"containerimage.config.digest": "sha256:d8b8b4f781520aeafedb5a88ff50fbb625cfebad87e392794f1e26a724a2f22a",
"containerimage.digest": "sha256:868f04872380274dcf8528222e84dc66702394de80889e51c87a14126ea9ff6a"
}
Buildctl では、ビルド メタデータを出力するフラグも使用できます --metadata-file
。
Docker buildx image
buildx バイナリに buildx-bin Docker イメージを介してアクセスしてビルドできるようになり、たとえば CI の Docker イメージ内で buildx を使用できるようになりました。 ドッカーファイル内でbuildxを使用する方法は次のとおりです。
FROM docker
COPY --from=docker/buildx-bin:latest /buildx /usr/libexec/docker/cli-plugins/docker-buildx
RUN docker buildx version
その他の変更
変更の完全なリストについては、公式リリースノートを参照してください。