ホームページ > 運用・保守 > Docker > マルチステージビルドを使用してカスタムDocker画像を実装する方法は?

マルチステージビルドを使用してカスタムDocker画像を実装する方法は?

James Robert Taylor
リリース: 2025-03-11 16:46:17
オリジナル
396 人が閲覧しました

マルチステージビルドでカスタムドッカー画像を実装する方法?

マルチステージDockerビルドの実装

マルチステージビルドは、Dockerの単一 dockerfile 内で複数の段階を定義する能力を活用します。各段階は別のビルド環境を表しているため、ビルドプロセスを最終的なランタイム環境から分離できます。これは、最終画像のサイズを最小限に抑えるために重要です。

簡単なnode.jsアプリケーションのマルチステージビルドを示す基本的な例を示します。 。 npm run build#ステージ2:nginxからランタイム画像を作成:アルパインコピー - = from/app/dist/share/nginx/html

すべてのビルド依存関係がインストールされ、アプリケーションはこの段階内に構築されます。

  • ステージ2:このステージでは、軽量のnginxイメージを使用します。構築されたアプリケーションアーティファクト( Builder ステージからの)のみが最終画像にコピーされます。これにより、最終画像からすべてのビルドツールと依存関係が排除され、サイズが小さくなります。
  • コピー - = from = builder 命令が重要です。以前の段階からアーティファクトを現在の段階にコピーします。 as as< stage_name>

    as as as as as as< as as as as as as as asを使用して名前を付けることができます。特定のアプリケーションとビルドプロセスに合わせてパスとコマンドを調整することを忘れないでください。より複雑なアプリケーションの場合、ビルドの異なる部分を分離するためにさらに多くの段階が必要になる場合があります(たとえば、ある段階でCコードをコンパイルしてから別の段階でnode.jsアプリケーションを構築します)。

    カスタムDocker画像にマルチステージビルドを使用することの利点は何ですか?利点:
    • 画像サイズの削減:これは最も説得力のある利点です。ビルドツールと依存関係をランタイム環境から分離することにより、最終的な画像サイズを大幅に削減し、ダウンロードを高速化、ストレージ要件、セキュリティの改善につながります。不要なファイルとツールを削除すると、潜在的な脆弱性が最小限に抑えられます。各段階には特定の目的があり、ビルドプロセスを理解し、維持し、デバッグしやすくなります。
    • ビルド時間の速い:複数の段階のために初期ビルドがわずかに長くなる可能性がありますが、その後のビルドはキャッシングの恩恵を受け、全体的にビルド時間を速くします。これは、Dockerが以前のビルドから中間層をキャッシュできるためです。

      基本的なマルチステージアプローチを超えて、いくつかの手法で画像サイズをさらに最適化できます。

      • 最小限のベース画像を選択します。 Alpine Linuxバリエーションは、サイズが小さいことが多いことがよくあります。
      • 使用 .dockerignore codeRignore ファイルを作成して、不要なファイルとディレクトリが画像にコピーされるのを除外します。これにより、大きなファイルとディレクトリが画像サイズを不必要に増やすことができなくなります。
      • 中間ファイルのクリーンアップ:各段階で、 rm-rf/var/lib/apt/lists/*のようなコマンドを使用します。
      • 依存関係を最小限に抑える:アプリケーションの依存関係を慎重に確認し、未使用のパッケージまたはライブラリを削除します。これは、依存関係を分離するのに役立ち、最終画像に必要なファイルのみを含めます。
      • さまざまなアーキテクチャにマルチステージを使用します。複数のアーキテクチャを構築する場合は、マルチステージを使用してアプリケーションを1回構築してから、アーキテクチャ固有のランタイム画像に出力をコピーします。これにより、各アーキテクチャのアプリケーションの再構築が回避されます。

      複数の段階で構築されたカスタムDocker画像を保護するための最良のプラクティスは何ですか?利用可能な最小で最も安全なベース画像。基本画像を定期的に更新して脆弱性をパッチします。

    • 定期的に依存関係を更新します:既知のセキュリティ欠陥を軽減するためにすべての依存関係を維持します。ユーザー:妥協からの潜在的な損害を制限するために、コンテナ内の非ルートユーザーとしてアプリケーションを実行します。過度の特権でコンテナの実行を避けます。
    • ビルドプロセスを確保します:ビルド環境が安全であり、Dockerfilesが危険にさらされていないことを確認してください。潜在的な脆弱性を特定して対処するためのプロセスを構築します。必要なコンポーネントと依存関係のみを含めます。

    これらのプラクティスに熱心に従うことにより、マルチステージDocker画像のセキュリティを大幅に強化できます。セキュリティは継続的なプロセスであり、継続的な監視と更新が必要であることを忘れないでください。

    以上がマルチステージビルドを使用してカスタムDocker画像を実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート