1. ツールの説明
Docker Buildx は、docker コマンドを拡張して Moby BuildKit が提供する機能をサポートする docker CLI プラグインです。 docker build と同じユーザー エクスペリエンスを提供し、多くの新機能を追加します。 BuildKit は、多くの主要機能を備えた次世代のイメージ構築コンポーネントです。この記事では、複数のシステム アーキテクチャをコンパイルできる機能を主に使用します。 URL: https://github.com/moby/buildkit この機能は Docker v19.03 以降でのみ使用できることに注意してください。 この記事では、Buildx を使用して複数のシステム アーキテクチャのイメージをビルドする方法について説明します。 始める前に、Linux システム (すべての主要ディストリビューション) に 64 ビット Docker がインストールされていることを前提としています。 この記事の執筆時点で使用されている Docker バージョンは 19.03.11 です。
2. 動作原理Buildx は基本的にビルドキット API を呼び出し、ビルドはビルドキット環境で実行されます。複数のアーキテクチャがサポートされるかどうかは、ビルドキット環境によって異なります。ビルドキットが複数のアーキテクチャをサポートする必要がある場合は、ホスト マシン上で実行する必要があります。 (もちろんこれは必須ではなく、ビルドの要件に応じて制御されます) BuildKit は、ビルドを呼び出すユーザーが実行しているアーキテクチャとオペレーティング システムだけでなく、複数のプラットフォーム向けにビルドするように設計されています。 ビルドを呼び出すときに、--platform フラグを設定して、ビルド出力のターゲット プラットフォームを指定できます (例: linux/amd64、linux/arm64、darwin/amd64)。 現在のビルダー インスタンスが docker-container または kubernetes ドライバーによってサポートされている場合は、複数のプラットフォームをまとめて指定できます。この場合、指定されたすべてのアーキテクチャのタイプを含むマニフェスト リストが作成されます。このイメージを docker run または docker service で使用すると、Docker はノードのプラットフォームに基づいて正しいイメージを選択します。 Buildx と Dockerfiles でサポートされている 3 つの異なる戦略を使用して、マルチプラットフォーム イメージを構築できます。
ノードがすでに QEMU をサポートしている場合 (たとえば、Docker Desktop を使用している場合)、QEMU を開始するのが最も簡単な方法です。 Dockerfile を変更する必要はなく、BuildKit は利用可能なセカンダリ アーキテクチャを自動的に検出します。 BuildKit が異なるアーキテクチャ用のバイナリを実行する必要がある場合、binfmt_misc ハンドラに登録されたバイナリを介して自動的にロードされます。 ホスト OS 上の binfmt_misc を使用して登録された QEMU バイナリがコンテナー内で透過的に動作するには、fix_binary フラグを使用して登録する必要があります。これにはカーネル >= 4.8 および binfmt-support >= 2.1.7 が必要です。 /proc/sys/fs/binfmt_misc/qemu-* に何かあるかどうかを確認することで、正しく登録されているかどうかを確認できます。 Docker Desktop には他のプラットフォーム用の binfmt_misc サポートが事前設定されていますが、他のインストールでは tonistiigi/binfmt イメージを使用してインストールする必要がある場合があります。
複数のネイティブ ノードを使用すると、QEMU が処理できないより複雑な状況をより適切にサポートでき、一般的にパフォーマンスが向上します。 --append フラグを使用して、ビルダー インスタンスに追加のノードを追加できます。 2. Buildxを有効にするDocker は 19.03 で新しい機能を導入し、ARM イメージなどのさまざまな CPU アーキテクチャのイメージをビルドできるようになりました。これは、エミュレータを導入する必要なく Docker 自体が提供するネイティブの統合ビルド メカニズムですが、使用する前に設定する必要があります。 (バージョン 20.10 以降では、Docker CLI のすべての実験的な機能がデフォルトで有効になっており、システム環境変数を構成または設定する必要はありません。) buildx コマンドは実験的な機能なので、最初に有効にする必要があります。
実験的な機能が有効になっていないため、直接使用すると以下の問題が発生する可能性があります。
~/.docker/config.json ファイルを編集し、次の内容を追加します (以下のデモンストレーションは、.docker ディレクトリが事前に存在しない場合に適用されます)。バージョン情報を表示するには、docker version コマンドを使用します。設定が有効になると、Server: Docker Engine に Experimental: true が設定されていることがわかります。
Linux/macOS の場合、または環境変数を設定する場合 (非推奨):
3. 新しいビルダーインスタンスを作成するDocker 19.03 以降では、docker buildx build コマンドを使用して BuildKit でイメージをビルドできます。このコマンドは、複数のシステム アーキテクチャを同時にサポートする Docker イメージをビルドするための --platform パラメータをサポートしており、ビルド手順が大幅に簡素化されます。 Docker は Linux システム アーキテクチャの下では ARM アーキテクチャ イメージをサポートしていないため、この機能をサポートするために新しいコンテナーを実行できます。 Docker デスクトップ バージョンをセットアップする必要はありません (Mac システム)。 マルチアーキテクチャイメージの構築にはカーネル内の QEMU エミュレーションサポートを使用します。
注: docker/binfmt の場合、最新のイメージを取得するには、URL: https://hub.docker.com/r/docker/binfmt/tags を参照してください。 デフォルトの Docker ビルダー インスタンスでは複数の --platforms を同時に指定できないため、最初に新しいビルダー インスタンスを作成する必要があります。同時に、国内のイメージの取得が遅いため、イメージ高速化アドレス dockerpracticesig/buildkit:master で設定したイメージを使用して、公式イメージを置き換えることができます。 プライベート イメージ アクセラレータをお持ちの場合は、https://github.com/docker-practice/buildx に基づいて独自のビルドキット イメージをビルドして使用できます。
既存のビルダーインスタンスを表示します。
4. 新しいDockerfileを作成する複数のシステム アーキテクチャのイメージをビルドするには、サポートする Dockerfile ファイルも必要です。ここでのマルチアーキテクチャ イメージに関する最も重要な点は、ベース イメージとインストールされたソフトウェアの両方が複数のアーキテクチャをサポートする必要があることです。 以下はサンプルの Dockerfile ファイルです。 Dockerfile ファイルの内容は次のとおりです。
$TARGETPLATFORM は組み込み変数であり、その値は --platform パラメータによって指定されます。 これは alpine イメージをベースとしており、alpine は次の 7 つのシステム アーキテクチャをサポートしているため、作成するイメージもこれらの 7 つのシステム アーキテクチャをサポートします。
よりわかりやすいスキーマ名は次のようになります。
ARM システム アーキテクチャの簡単な概要は次のとおりです。
Intel と AMD の比較ははるかに簡単です。
5. イメージを構築するdocker buildx build のパラメータの具体的な意味については、次の公式ドキュメントを参照してください: https://docs.docker.com/engine/reference/commandline/buildx_build/ 。 $ docker buildx build コマンドを使用してイメージをビルドします。 myusername を自分の Docker Hub ユーザー名に置き換える必要があることに注意してください。 --push パラメータは、ビルドされたイメージを Docker リポジトリにプッシュすることを意味します。次に、マルチシステム アーキテクチャ イメージをビルドし、ビルドしたイメージを Docker リポジトリ (hub.docker.com) にプッシュします。この操作の前に、アカウントを登録し(デモのプロセスでは省略)、ログインする必要があります。 ログインコマンドは次のとおりです。
ログインするにはユーザー名とパスワードを入力してください。 次のコマンドのタグの前に、ユーザー名 doubledong が付いていることに注意してください。独自の画像を作成したい場合は、独自のユーザー名に置き換えてください。 --push パラメータを使用してイメージをビルドし、Docker リポジトリにプッシュします。 ビルドコマンドは次のとおりです。 7つのプラットフォームをサポートするためにローカルでイメージを構築する
コマンドが正常に実行されると、Docker Hub にアップロードしたイメージが表示されます。例の写真は次のとおりです。 上記の手順を完了すると、ビルドされたイメージが実際にローカル パスに配置されます。次に、既存のビルダー インスタンスを確認しましょう。
mybuilder では 8 つのアーキテクチャがサポートされていることがわかります (riscv64 はまだ使用されていませんが、サポートされています)。 このとき、docker イメージの実行状態を確認すると、buildx_buildkit_mybuilder0 というコンテナが実行中であることがわかります。 これは、現在ローカルでビルドするときに自動的に作成されます。停止したり削除したりしないように注意してください。
6. 最後に複数のシステム アーキテクチャ用の Docker イメージを作成する場合は、強力な CPU または複数のコアを備えた VPS を使用してビルドすることをお勧めします。そうしないと、非常に時間がかかります。この記事では主に、マルチアーキテクチャ イメージを手動で構築する方法について説明しますが、cicd ツールを使用して自動化することもできます。以降の記事で説明する 参考リンク: https://yeasy.gitbook.io/docker_practice/image/manifest https://github.com/docker/buildx#installing この記事はWeChatの公開アカウント「運営保守開発ストーリー」から転載したものです。 |
<<: PaaSとは何ですか?どのようなポジショニングですか?利点は何ですか?
>>: 天一クラウドと中国アラブ博覧会が協力し、デジタル経済に新たな活力を注入
1月10日、知的財産出版社i Think Tankは「中国インターネットクラウド技術特許分析レポート...
Godaddy - 初回注文で 65% オフの割引コード、6 月 25 日に期限切れになります!左の...
virmach がストレージ VPS (大容量ハードドライブ VPS、データバックアップ VPS) ...
CDN が誕生して以来、従来の CDN、クラウド CDN、共有 CDN の 3 世代が存在しましたが...
「Forbes: SEO は終わり、ソーシャル リアルタイム コンテンツが人気」という記事があります...
タオバオは、サードパーティのトラフィックプラットフォームに関する新しいポリシーを発表しました。VIP...
クラウド移行アプローチは、既存のオンプレミス サーバーからクラウド コンピューティング サーバーにデ...
SEO 担当者やウェブマスターは、通常、PV、UV、IP などの多くのデータを確認する必要があります...
最近、百度検索エンジンは頻繁にアルゴリズムを調整しています。数日前、私のウェブサイトの1つが毎日2つ...
[[441390]]調査会社ガートナーによると、世界のローコード開発市場規模は2021年に138億米...
サブドメインとディレクトリに関しては、多くの人がそれらの違いを知らず、いつサブドメインを使用し、いつ...
すべてのウェブマスターがウェブサイトの構築に一生懸命取り組んだ後、次に最も重要なことは、正確にターゲ...
パブリッククラウドサービス市場は成長している調査会社ガートナーによると、パブリッククラウドの市場規模...
vpsserver は 2009 年に設立されたアメリカのホスティング会社で、KVM 仮想化と純粋な...
Vultr は、SSD VPS クラウドがスナップショット機能を正式にサポートすることを公式に発表し...