エンジニアリング アップデート: BuildKit 0.9 および Docker Buildx 0.6 リリース

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 コレクタは、 grpcHTTP プロトスの両方でサポートされています。

また、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
1 2

リソース制限

ユーザーは BuildKit ソルバーの並列処理を制限できるようになり、 Buildkitd 構成では、BuildKit ソルバーの並列処理を制限するための最大並列処理が可能になり、低電力マシンで特に役立ちます。

GitHub アクションでこれを行う場合の例を次に示します。

2 2

また、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

その他の変更

変更の完全なリストについては、公式リリースノートを参照してください。