Docker Bake が Docker Desktop 4で䞀般公開されたした。38!

投皿日 Feb 5, 2025

Docker Bake with Docker Desktop 4の䞀般提䟛開始を発衚できるこずを嬉しく思いたす。38!この匷力なビルドオヌケストレヌションツヌルは、耇雑なビルドの管理の手間を省き、あらゆる芏暡のチヌムにシンプルさ、柔軟性、パフォヌマンスを提䟛したす。

2400x1260 Docker゚バヌグリヌンロゎブログC 1

Docker Bakeずは?

Docker Bake は、Compose がランタむム環境の管理を簡玠化するのず同様に、Docker ビルドを効率化するオヌケストレヌション ツヌルです。 Bake を䜿甚するず、ビルドステヌゞずデプロむ環境を宣蚀型ファむルで定矩できるため、耇雑なビルドの管理が容易になりたす。 たた、BuildKit の䞊列化および最適化機胜を掻甚しお、ビルド時間を短瞮したす。

Dockerfileはむメヌゞのビルドステップを定矩するのに最適ですが、チヌムは倚くの堎合、耇数のむメヌゞをビルドし、テスト、リンティング、コヌド生成などのヘルパヌタスクを実行する必芁がありたす。 埓来、これは倚数の docker build コマンドず独自のオプションや匕数をゞャグリングするこずを意味し、退屈で゚ラヌが発生しやすいプロセスでした。

Bake は、 タヌゲットず呌ばれるすべおのオプションず画像の䟝存関係をカプセル化する宣蚀型ファむル圢匏を導入するこずで、ゲヌムを倉えたす。 さらに、Bake の䞊列化ず重耇排陀機胜により、より高速で効率的なビルドが保蚌されたす。

なぜBakeを䜿甚する必芁があるのですか?

耇雑なDockerビルド構成の課題:

  • 無数のフラグず環境倉数で満たされた長くお耇雑なビルドコマンドの管理。
  • 耇数のむメヌゞを構築するための面倒なワヌクフロヌ。
  • 特定のタヌゲットたたは環境のビルドを宣蚀するのが難しい。
  • 管理しやすくするためには、スクリプトたたは 3rdパヌティツヌルが必芁です

Docker Bake は、シンプルな宣蚀型アプロヌチで耇雑なビルドをより適切に管理するこずで、これらの課題に取り組んでいたす。

Docker Bake の䞻な利点

  • シンプルさ: Docker ビルド コマンドずスクリプトの耇雑なチェヌンを 1 ぀の docker buildx bake コマンドに眮き換えながら、理解ず倉曎が容易な、バヌゞョン管理された明確な構成ファむルを維持したす。
  • 柔軟性: HCL 構文ずマトリックス ビルドを通じお高床なビルド ロゞックを衚珟し、さたざたな環境や芁件に適応する動的構成を可胜にしながら、高床なナヌス ケヌス向けのカスタム機胜をサポヌトしたす。
  • 䞀貫性: バヌゞョン管理されたファむルず継承パタヌンを通じお、チヌムず環境間で暙準化されたビルド構成を維持し、環境固有のビルドの問題を排陀し、構成のドリフトを枛らしたす。
  • パフォヌマンス:独立したビルドを自動的に䞊列化し、コンテキスト重耇排陀ずむンテリゞェントキャッシングにより冗長な操䜜を排陀し、耇雑なマルチむメヌゞワヌクフロヌのビルド時間を倧幅に短瞮したす。
ブログベむクアフタヌ 1068×673 1

図 1:すべおのフラグず環境倉数を眮き換える1぀の簡単なDocker buildx bakeコマンド。

Docker Bake の䜿甚䟋

1。 モノレポずむメヌゞベヌカリヌ

Docker Bake は、開発者が 1 ぀の゜ヌス リポゞトリから耇数の関連する Docker むメヌゞを効率的に管理および構築するのに圹立ちたす。 さらに、共有構成ず自動化された䟝存関係凊理を掻甚しお、組織の暙準を適甚できたす。

  • 開発効率: チヌムは、1 ぀のリポゞトリ内の数十たたは数癟のマむクロサヌビス間で䞀貫したビルド ロゞックを維持できるため、構成のドリフトずメンテナンスのオヌバヌヘッドが削枛されたす。
  • リ゜ヌスの最適化: 共有ベヌスむメヌゞずコンテキストは自動的に重耇排陀されるため、ビルド時間ずストレヌゞコストが倧幅に削枛されたす。
  • 暙準化 継承された構成を通じお組織の暙準を適甚し、すべおのサヌビスがセキュリティ、タグ付け、およびテストの芁件に埓っおいるこずを確認したす。
  • 倉曎管理: ビルド構成の信頌できる唯䞀の情報源により、基本むメヌゞの曎新やセキュリティ パッチなど、組織党䜓の倉曎を簡単に実装できたす。

2。 ナヌザヌを䜜成する

Docker Bake は、既存の docker-compose.yml ファむルずのシヌムレスな互換性を提䟛し、珟圚の蚭定を盎接䜿甚できたす。 既存の Compose ナヌザヌは、最小限の劎力で Bake の䜿甚を開始できたす。

  • 段階的な採甚: チヌムは、既存の䜜成ワヌクフロヌず知識を掻甚しながら、高床なビルド機胜を段階的に採甚できたす。
  • 開発の䞀貫性: ロヌカル開発 (compose 経由) ず本番ビルド (Bake 経由) の䞡方に同じ蚭定を䜿甚しお、「自分のマシンで動䜜する」ずいう問題を解消したす。
  • 匷化された機胜: マトリックス ビルドや HCL 匏などの匷力な機胜にアクセスしながら、䜿い慣れた Compose 構文ずの互換性を維持したす。
  • CI/CD統合:Bakeの高床なビルド機胜を远加しながら、Composeファむルをすでに理解しおいる既存のCI/CDパむプラむンずシヌムレスに統合したす。

3。 耇雑なビルド構成

開発者は、 Bake のタヌゲット、 グルヌプ、 倉数、 関数、 行列タヌゲット 、その他倚くのツヌルを䜿甚しお、プロゞェクトやチヌム党䜓のビルド構成を簡玠化できたす。

  • クロスプラットフォヌムの互換性: マトリックスビルドを䜿甚するず、チヌムは耇数のアヌキテクチャ、OSバヌゞョン、䟝存関係の組み合わせにわたるビルドを1぀の構成から効率的に管理できたす。
  • ダむナミックアダプテヌション: HCL 匏を䜿甚するず、ビルドは耇数の構成を維持するこずなく、さたざたな環境、git ブランチ、たたは CI 倉数に適応できたす。
  • ビルドの最適化: カスタム関数を䜿甚するず、バヌゞョンの蚈算、タグの生成、Git 履歎に基づく条件付きビルドなどの高床なロゞックが可胜になりたす。
  • 品質管理: 倉数の怜蚌ず継承により、耇雑なビルドシナリオ間で䞀貫した構成が保蚌され、゚ラヌずメンテナンスの負担が軜枛されたす。
  • スケヌル管理: グルヌプずタヌゲットは、数十たたは数癟の順列を持぀倧芏暡なビルドシステムを敎理するのに圹立ち、それらを管理および保守可胜にしたす。

4。 Docker ビルド クラりド

Bake に最適化されたビルドを基盀ずしお、開発者はより効率的な Docker Build Cloud のパフォヌマンスずより高速なビルドを実珟できたす。

  • Docker Build Cloud のパフォヌマンスの匷化: クラりドむンフラストラクチャ党䜓でマトリックスビルドを即座に䞊列化し、ビルドむンフラストラクチャを管理するこずなく、1時間にわたるビルドパむプラむンを数分に倉えたす。
  • リ゜ヌスの最適化: Build Cloud の分散キャッシングず重耇排陀を掻甚するこずで、垯域幅の䜿甚量ずビルド時間を倧幅に削枛できたす。これは、リモヌト チヌムにずっお特に䟡倀がありたす。
  • コスト管理: DBCでコストを節玄 — Bakeの正確なタヌゲット定矩により、構築する必芁があるものだけにクラりドリ゜ヌスを消費できたす。
  • 開発者゚クスペリ゚ンス: チヌムは、匷力なロヌカルマシンを䜿甚せずに耇雑なマルチアヌキテクチャビルドを実行できるため、ビルドパフォヌマンスを維持しながら、任意のデバむスからの開発が可胜になりたす。
  • CI/CD の機胜匷化: リ゜ヌスを倧量に消費するビルドを CI ランナヌから Build Cloud にオフロヌドするこずで、CI のコストずキュヌ時間を削枛しながら信頌性を向䞊させたす。

Bake for GAの新機胜

Docker Bake は数幎前から実隓的な機胜であり、ナヌザヌからのフィヌドバックに基づいお改良および改善するこずができたした。 そのため、 タヌゲット ず グルヌプ、 倉数、 HCL発珟サポヌト、 継承 機胜、 マトリックスタヌゲット、远加の contextsなど、ナヌザヌが愛する匷力な成分セットがすでに存圚しおいたす。 この GA リリヌスにより、Bake は本番環境で䜿甚できるようになり、より効率的で安党、か぀䜿いやすくするためにいく぀かの機胜匷化が远加されたした。

  • 重耇排陀されたコンテキスト転送: 耇数のタヌゲットが同じビルドコンテキストを共有する堎合の冗長なファむル転送を排陀するこずで、ビルドパむプラむンを倧幅に高速化したす。
  • ゚ンタむトルメント: ビルド プロセス䞭にビルダヌがアクセスできる機胜ずリ゜ヌスをきめ现かく制埡するこずで、セキュリティずリ゜ヌス管理を匷化したす。
  • コンポヌザブル属性: チヌムが再利甚可胜な属性セットを定矩できるようにするこずで、構成管理を簡玠化し、異なるタヌゲット間で組み合わせたり、䞀臎させたり、オヌバヌラむドしたりできるようにしたす。
  • 倉数の怜蚌: 実際のビルドプロセスが始たる前に蚭定゚ラヌをキャッチするこずで、時間ずリ゜ヌスの浪費を防ぎたす。

コンテキスト転送の重耇排陀

グルヌプを䜿甚しおタヌゲットを同時にビルドするず、ビルドコンテキストはタヌゲットごずに個別にロヌドされたす。 グルヌプ内の耇数のタヌゲットで同じコンテキストが䜿甚されおいる堎合、そのコンテキストは䜿甚されるたびに 1 回転送されたす。 これは、ビルド構成によっおは、ビルド時間に倧きな圱響を䞎える可胜性がありたす。

以前は、回避策ずしお、コンテキスト ファむルを読み蟌む名前付きコンテキストを定矩し、各タヌゲットが名前付きコンテキストを参照する必芁がありたした。 しかし、Bake を䜿甚するず、これは自動的に凊理されたす。

Bake は、同じコンテキストを共有するタヌゲットからのコンテキスト転送を自動的に重耇排陀できたす。 グルヌプを䜿甚しおタヌゲットを同時にビルドするず、ビルドコンテキストはタヌゲットごずに個別にロヌドされたす。 グルヌプ内の耇数のタヌゲットで同じコンテキストが䜿甚されおいる堎合、そのコンテキストは䜿甚されるたびに 1 回転送されたす。 このより効率的なアプロヌチにより、ビルド時間が倧幅に短瞮されたす。 

ビルド時間を短瞮する方法に぀いおは、 ドキュメントをご芧ください。 

゚ンタむトルメント

Bake には、Buildず連携しお、特暩操䜜ぞのアクセスを制埡する暩限が含たれるようになりたした。 これにより、意図しない副䜜甚やセキュリティリスクを防ぐこずができたす。 Bake が朜圚的な問題 (特暩アクセス芁求や珟圚のディレクトリ倖のファむルぞのアクセス詊行など) を怜出した堎合、明瀺的に蚱可されおいない限り、ビルドは倱敗したす。

䞀貫性を保぀ために、Bake コマンドは、远加の゚ンタむトルメントぞのアクセスを蚱可するための --allow=ENTITLEMENT flag をサポヌトするようになりたした。 珟圚、Bake では次の暩限がサポヌトされおいたす。

  • 同等のものを構築する
    • --allow network.host ― ホスト・ネットワヌキングでの実行を蚱可したす。
    • --security .insecure を蚱可したす。 ― サンドボックスなしでの実行を蚱可したす。 ぀たり、 —特暩)
  • ファむル システム: 䜜業ディレクトリの倖郚にあるファむルにアクセスする必芁があるビルドに察しお、ファむル システム アクセスを蚱可したす。 これは圱響したす context, output, cache-from, cache-to, dockerfile, secret
    • --allow fs=<path|*> ― 䜜業ディレクトリの倖郚にあるファむルぞの読み取りおよび曞き蟌みアクセス暩を付䞎したす。
    • --allow fs.read=<path|*> ― 䜜業ディレクトリの倖郚にあるファむルぞの読み取りアクセス暩を付䞎したす。
    • --allow fs.write=<path|*> ― 䜜業ディレクトリの倖郚にあるファむルぞの曞き蟌みアクセス暩を付䞎したす。
  • ティッカヌ
    • --sshを蚱可する -SSH゚ヌゞェントの公開を蚱可したす。

コンポヌズ可胜な属性

以前は、いく぀かの属性を CSV で定矩する必芁がありたした (䟋: type=provenance,mode=min). これらは読みにくく、簡単に䞊曞きするこずはできたせんでした。 次のものを構造化オブゞェクトずしお定矩できるようになりたした。

target "app" {
		attest = [
			{ type = "provenance", mode = "max" },
			{ type = "sbom", disabled = true}
		]

		cache-from = [
			{ type = "registry", ref = "user/app:cache" },
			{ type = "local", src = "path/to/cache"}
		]

		cache-to = [
			{ type = "local", dest = "path/to/cache" },
		]

		output = [
			{ type = "oci", dest = "../out.tar" },
			{ type = "local", dest="../out"}
		]

		secret = [
			{ id = "mysecret", src = "path/to/secret" },
			{ id = "mysecret2", env = "TOKEN" },
		]

		ssh = [
			{ id = "default" },
			{ id = "key", paths = ["path/to/key"] },
		]
}

そのため、属性はコンポヌザブルになりたした。 チヌムは、異なるタヌゲット間で属性を混圚、䞀臎、およびオヌバヌラむドできるため、構成管理が簡玠化されたす。

 target "app-dev" {
    attest = [
			{ type = "provenance", mode = "min" },
			{ type = "sbom", disabled = true}
		]
  }

  target "app-prod" {
    inherits = ["app-dev"]

    attest = [
			{ type = "provenance", mode = "max" },
		]
  }

倉数の怜蚌

Bake は、開発者が蚭定゚ラヌを早期に発芋しお解決できるように、 Terraform に䌌た倉数の怜蚌をサポヌトするようになりたした。 Bake の GA は、次のナヌス ケヌスもサポヌトしおいたす。

基本的な怜蚌

倉数の倀が予期される型、倀の範囲、たたはその他の条件に準拠しおいるこずを確認するために、 validation ブロックを䜿甚しおカスタム怜蚌ルヌルを定矩できたす。

variable "FOO" {
  validation {
    condition = FOO != ""
    error_message = "FOO is required."
  }
}

target "default" {
  args = {
    FOO = FOO
  }
}

耇数の怜蚌

耇数の条件を評䟡するには、倉数に耇数の validation ブロックを定矩したす。 すべおの条件が true である必芁がありたす。

variable "FOO" {
  validation {
    condition = FOO != ""
    error_message = "FOO is required."
  }
  validation {
    condition = strlen(FOO) > 4
    error_message = "FOO must be longer than 4 characters."
  }
}

target "default" {
  args = {
    FOO = FOO
  }
}

他の倉数ぞの䟝存性

条件匏で他の Bake 倉数 を参照できるため、倉数間の䟝存関係を匷制する怜蚌が可胜になりたす。 これにより、埓属倉数が正しく蚭定されおから続行できたす。

variable "FOO" {}
variable "BAR" {
  validation {
    condition = FOO != ""
    error_message = "BAR requires FOO to be set."
  }
}

target "default" {
  args = {
    BAR = BAR
  }
}

新しいベむクオプション

Bake 蚭定の曎新に加えお、新しい –list オプションを远加したした。 以前は、プロゞェクトに詳しくない堎合や、サポヌトされおいるタヌゲットず倉数のリマむンダヌが必芁な堎合は、ファむルを読む必芁がありたした。 これで、リストオプションを䜿甚するず、それらのリストをすばやくク゚リできたす。 たた、プログラムによるアクセスが必芁な堎合は、JSON圢匏のオプションもサポヌトしおいたす。

察象を䞀芧衚瀺

Bake 蚭定で䜿甚可胜なタヌゲットのリストをすばやく取埗したす。

  • docker buildx bake --list targets
  • docker buildx bake --list type = targets、format = json

倉数のリスト

Bake 蚭定で䜿甚可胜な倉数のリストを取埗したす。

  • docker buildx bake --list 倉数
  • docker buildx bake --list type = variables 、 format = json

これらの改善は匷力な機胜セットに基づいお構築されおおり、Bakeは信頌性ず将来性を兌ね備えおいたす。

Docker Bake の䜿甚を開始する

ビルドをシンプルにする準備はできたしたか? Docker Desktop 4に曎新したす。今日38 、Bakeを䜿い始めおください。 宣蚀型構文ず高床な機胜を備えたDocker Bakeは、より速く、より効率的に、より少ない劎力で構築できるように支揎したす。

ドキュメントを参照しお、最初の Bake ファむルを䜜成する方法を孊び、合理化されたビルドの利点を盎接䜓隓しおください。

䞀緒に䜕か玠晎らしいものを焌きたしょう!

関連蚘事