ほとんどの企業と同様に、当社では製品で使用するすべてのコンポーネントに対して Docker イメージを構築しています。時間が経つにつれて、これらのイメージの一部はどんどん大きくなり、継続的インテグレーション (CI) ビルドはどんどん長くなりました。私の目標は、CI ビルドにかかる時間を 5 分以内にすることです。 生産性が低下する理由は次のとおりです。
この記事では、ビルド時間を大幅に改善する 2 つの小さな改善を適用しました。 2 つの改善点を導入する前に、まず次のような Dockerfile の作成に関するベスト プラクティスに従っていることを確認してください。
Buildkit と BuildxBuildkit と Buildx について説明します。これら 2 つの用語は互換的に使用されることが多いですが、まったく同じではありません。この記事を書く前は、私もこの2つの違いを完全に理解していませんでした。 ビルドキットBuildkit は、従来の Docker ビルダーに代わる改良されたバックエンドです。 2018 年から Docker にパッケージ化され、Docker Engine 23.0 のデフォルト ビルダーになりました。 Buildkit は多くの便利な機能を提供します:
Buildkit を使用すると、docker build コマンドの出力がよりクリーンで構造化されていることに気づくはずです。 Docker バージョン 23.0 より前のバージョンの場合、Buildkit を使用する一般的な方法は、Buildkit パラメータを次のように設定することです。 これにより、インライン キャッシュが有効になり、ビルド プロセスが大幅に高速化されます。ただし、これは Docker バージョン 23.0 未満では使用できません。 ビルドxBuildx は Docker のプラグインであり、これを使用すると Docker で Buildkit の機能を最大限に活用できます。これは、Buildkit が多くの新しい構成オプションをサポートしており、そのすべてを下位互換性のある方法で docker build コマンドに統合できないために作成されました。 Buildx はイメージのビルドに加えて、複数のビルダーの管理もサポートしています。これは、共有 Docker デーモンを変更しないため、継続的インテグレーションにおいて、さまざまな構成を持つ適切にスコープ設定された環境を定義する場合に非常に役立ちます。 次の手順に従って Buildx の使用を開始できます。 1. リモートキャッシュのメリットビルドを高速化する最初の方法は、イメージをリモート レジストリにキャッシュすることです。この方法では、ビルドが異なるマシンで実行される場合でも (CI では一般的)、ビルド キャッシュのメリットを享受できます。ほとんどの人は、イメージの新しいバージョンをビルドする前に、イメージの最新バージョンを取得します。これには、変更されていないレイヤーをキャッシュするという利点がありますが、最初に完全なイメージを取得するという犠牲が伴います。完全なイメージを取得するには時間がかかる場合があり、レイヤーが再利用できる保証はありません。説明には次のコマンドを使用します。 Buildx を使用すると、キャッシュ情報をリモートの場所 (コンテナー レジストリ、BLOB ストレージなど) に保存できます。ビルダーは、指定されたレイヤーがすでに存在するかどうかを確認し、存在する場合は、そのレイヤーを再作成するのではなく再利用します。この機能は、レイヤーをローカルにプルしなくても実行できます。以下のように表示されます。 モード「max」は、レイヤーが最終イメージで使用されていない場合でも (たとえば、マルチステージ ビルドを使用する場合)、各レイヤーのビルド情報を保存することを意味します。デフォルトでは、最終イメージに存在するレイヤーに関するビルド情報のみを保存するモード「min」が使用されます。 キャッシュの特殊なケースは、キャッシュされたデータを「インライン」で保存することです。つまり、イメージと一緒にキャッシュされるということです。このオプションは、Buildx なしで Buildkit を使用する場合にもサポートされます。これは、マルチステージ ビルドを使用する場合にはさらに困難であり、ビルド成果物の出力とキャッシュを明確に区別しません。キャッシュ データを「インライン」で保存するコマンドは次のとおりです。 2. 画像にファイルを追加する新しい方法Docker は Dockerfile 構文の新しいバージョン、#syntax=docker/dockerfile:1.4 を導入しました。 COPY および ADD コマンドの追加のリンク オプションをサポートします。 以前は、COPY または ADD コマンドを使用すると、ビルダーは新しいスナップショットを作成し、新しいファイルを既存のファイル システムにマージしていました。そのため、この操作を実行する前に親レベルが存在している必要があります。そうでない場合、ターゲット ディレクトリがまだ存在しない可能性があります。最終イメージ (ビルド コマンドの結果) は、対応するスナップショット間の差異を含む各レイヤーの tarball で構成されます。 リンク オプションを使用すると、新しいファイルは独自のスナップショットに配置され、前のレイヤーに依存しなくなります。リンクされたファイルは独自の tarball に保存され、次の図に示すように、既存のファイル システムに依存せずに異なる tarball がリンクされます。 主な利点は、ファイルが以前のレイヤーに依存しなくなることです。ファイルが変更されていない限り、親レイヤーが変更されてもレイヤーを再利用できます。 これにより、複数レイヤーのデータコピーを並行して実行できるようになるため、ビルド速度も向上します。 結論は上記2つの方法により、画像構築速度が1倍に向上しました。 |
>>: エッジコンピューティングはデータストレージをどのように変えるのでしょうか?
DDoS対策でよく知られているデータセンター、Sharktechは本日、ロサンゼルスのデータセンター...
Douyinで人気を博しているOriental Selectionが、Taobaoでライブ配信を開始...
2月9日午前、Meizu TechnologyとAlibaba Groupは、Alibaba Gro...
はじめに: モバイル広告への投資の継続的な増加、消費者のモバイル アプリケーションの使用習慣、モバイ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスリタ・ゼン出典: mor...
コンテンツとは、インターネット上で公開されるすべての情報を指します。コンテンツは、ユーザーが読んでニ...
最近、工業情報化部と3大通信事業者が5Gサービスの開始を正式に発表し、中国は正式に5G商用化時代に入...
オンライン ビデオ コンテンツの人気が高まるにつれ、一部の検索エンジン マーケティング担当者はこの傾...
適切なクラウド ソリューションを見つけるには、企業は慎重なアプローチを取る必要があります。ただし、適...
はじめに:世界的なブランドがソーシャル ネットワークに参入する時期は大きな影響はありませんが、あまり...
中国の高級品オンラインショッピングの巨大な市場需要は、少しの混乱で簡単に変わることはないだろう。現在...
クラウドはリソースの速度と規模の点で利点を提供しますが、銀行にとってセキュリティは依然として問題点で...
[[395191]] Seata は、19,200 を超えるスターと非常に活発なコミュニティを持つオ...
今年は昨年よりも多くの新しいウェブサイトが登場していますが、実際に望ましい結果を達成できるウェブサイ...
もう一年が過ぎ、冬が去り、春が戻ってきました。インターネット業界において、毎年最初の2か月は採用や就...