16システム上で実行可能なDockerイメージの構築

4550 ワード

この本にはいくつかの実践的な練習があります.別のマシンを使用して勉強している場合は、Mac、Windows、Linux、Raspberry Piで同じ方法で実行されていることがわかります.それは偶然ではない.本書のすべてのDockerイメージをマルチアーキテクチャイメージとして構築しました.マルチアーキテクチャイメージは、各イメージが異なるオペレーティングシステムまたはCPUアーキテクチャに対して同じイメージ名を使用し、複数のバリエーションを持つレジストリに構築およびプッシュされます.いずれかのイメージを使用してコンテナを実行したり、別のイメージを構築したりすると、DockerはシステムのCPUとOSに一致する変換をインポートします.異なるアーキテクチャで同じイメージ名を使用すると、異なるイメージ変換が得られますが、同じアプリケーションであり、同じ方法で動作します.ユーザーにとっては非常に簡単なワークフローですが、画像パブリッシャーにとってはいくつかの努力が必要です.
この章では、マルチアーキテクチャ構築の作成方法について学習しますが、WindowsやArmを使用しないため、この構築をスキップする場合は、少なくとも第1節を読んで、なぜ必要なのかを理解する必要があります.ゲームチェーン店のオプション.

16.1マルチアーキテクチャイメージがなぜ重要なのか


Amazon Webサービスは、インテル、AMD、またはArmプロセッサーを使用する仮想マシンに対して、異なるレベルの計算を提供します.Armオプション(A 1インスタンスと呼ばれる)は、IntelおよびAMDオプションの価格のほぼ半分です.AWSは、Armをサポートする最初のプライマリクラウドですが、Arm CPUの減少により、AWSのワークロードが失われ始めたときにサポートが追加される可能性があります.アプリケーションが半分近くの価格で実行できる場合は、なぜしないのでしょうか.まあ、Arm上でインテル向けに構築されたアプリケーションを実行するのは難しいからです.
一方、マイクロデバイスは消費電力の面で非常に効率的であるため、通常、Armプロセッサを実行し(そのため、クラウド上で値下げ)、コンテナイメージを使用してデバイスにソフトウェアを提供することが望ましい.ただし、Arm CPU命令は、インテルおよびAMDが使用する標準x 64命令と互換性がありません.したがって、クラウドまたはエッジ(またはRaspberry Piに満ちたデータセンター)上でArm CPUをサポートするには、Arm上で実行可能なアプリケーションプラットフォームを使用し、Armマシンを使用してアプリケーションを構築する必要があります.Dockerは、生産構築フィールドと開発者ワークフローの難点です.Docker Desktopはまた、Armアーキテクチャを使用してDockerイメージを構築し、コンテナを実行することをインテルシステム上でシミュレーションすることをサポートします.
tryこれはDocker EngineまたはPWDユーザー向けではありません.エンジンにArmシミュレーションがないため、Docker Desktopでのみ提供されます.この操作は、MacまたはWindows(Linuxコンテナモード)で実行できます.

  • まず、クジラアイコン設定で実験モードを有効にする必要がある(図16.1参照).

  • Now open a terminal and build an image using Arm emulation:
  • # switch to the exercises folder:
     cd ch16/exercises
     # build for 64-bit Arm:
     docker build -t diamol/ch16-whoami:linux-arm64 --platform linux/arm64 ./whoami
     # check the architecture of the image:
     docker image inspect diamol/ch16-whoami:linux-arm64 -f '{{.Os}}/{{.Architecture}}'
     # and the native architecture of your engine:
     docker info -f '{{.OSType}}/{{.Architecture}}'
    コンピュータが64ビットのインテルまたはAMDコンピュータ上で動作している場合でも、64ビットのArmプラットフォーム用に構築されたイメージが表示されます.この画像はマルチレベルDockerfileを使用します.NET Coreアプリケーションのコンパイルとパッケージング.NET CoreプラットフォームはArm上で動作し、Dockerfileのデフォルトイメージ(SDKおよびランタイム用)にはArm変換があります.これは、プラットフォーム間での構築をサポートするために必要なすべての内容です.
    このイメージをレジストリにプッシュし、Raspberry PiやAWSのA 1インスタンスなどの正規のArmマシンでコンテナを実行し、正常に動作します.【図16.2】「私の出力」を示す図である.ここでは、インテルシステム上にArmイメージを構築しました.
    Dockerは、オペレーティングシステムやCPUアーキテクチャなど、システムの多くの情報を理解し、画像のインポートを試みたときにマッチングとして使用します.インポート画像はダウンロードレイヤだけではありません.また、圧縮レイヤを最適化して、実行画像を展開して準備することもできます.この最適化は、使用するイメージが実行中のアーキテクチャと一致している場合にのみ実行されます.一致していない場合はエラーが発生します.イメージを試行および実行することもできません.コンテナ.
    TRY Linuxコンテナを実行するDockerエンジンを使用して検証できます.Microsoft Windowsイメージをダウンロードします.
     # pull the Windows Nano Server image:
     docker image pull mcr.microsoft.com/windows/nanoserver:1809
    Manifestリストは画像の変形セットです.Windows Nanoサーバイメージは、本格的なマルチアーキテクチャではなく、Windowsコンテナでのみ実行されます.ManifestリストにはLinuxバリエーションはありません.基本原則は、イメージのアーキテクチャはエンジンのアーキテクチャと一致しなければならないが、いくつかの意味がある.一致しないCPUアーキテクチャの場合はLinuxイメージをインポートできますが、コンテナには「ユーザープロセスによる実行フォーマットエラー」メッセージが表示されます.一部のWindowsエンジンでは、Linuxコンテナを実行できるLCOW(Linux Contenters on Windows)という実験的な機能が提供されています(複雑なアプリケーションは、より曖昧なログで失敗しました).エンジンに合わせたアーキテクチャを採用し、必要に応じてオペレーティングシステムやCPUごとにイメージを調整することが望ましい.

    16.2 1つまたは複数のDockerfileからマルチアーキテクチャイメージを構築する


    アーチイメージを複数作成するには、次の2つの方法があります.まず,本章の練習ではwhoamiアプリケーションの例に従う.ソースからアプリケーションをコンパイルし、コンテナにパッケージして実行するマルチレベルDockerfileを作成します.SDKおよびランタイムイメージがサポートするすべてのアーキテクチャをサポートしている場合は、続行できます.
    この方法の大きな利点は、Dockerfileを1つ持ち、サポートしたいアーキテクチャを得るために別のシステムに構築することです.このメソッドを使用します.NET Coreスタックに独自のゴールドイメージを作成します.図16.4は、SDKの方法を示す.

    【図16.4】マルチ構造画像に基づくマルチレベルDockerfileを用いて一意のマルチ構造画像を構築する
    この方法は、ソースイメージがマルチアーキテクチャイメージではないか、サポートするすべてのイメージがサポートされていない場合に使用できません.Docker Hubのほとんどの正式なイメージはマルチアーキテクチャですが、必要なすべての変換はサポートされていません.この場合、LinuxとWindowsに追加のDockerfileを提供するか、Arm 32ビットと64ビットにDockerfileを提供する必要があります.この方法は、複数のDockerfileがメンテナンスされるため、より多くの管理が必要ですが、各ターゲットアーキテクチャの動作を調整するためのより多くの自由を提供します.この方法をMavenの黄金画像(Javaアプリケーションを構築するツール)に使用します.図16.5はスタックを示す.
    この章の練習には、非常に簡単なフォルダリストアプリケーションがあります.このアプリケーションは、いくつかの実行時基本情報を印刷し、フォルダの内容をリストします.本書でサポートされている各アーキテクチャには、4つのDockerfileがあります.Windows on Intel、Linux on Intel、Linux on 32ビットArm、Linux on 64ビットArm.Docker Desktop上のCPUシミュレーションとLinuxコンテナを使用して、この3つの機能を構築およびテストできます.

    図16.5はまた、調整されたDockerfileを使用して、各アーキテクチャに複数のアーキテクチャイメージを作成することもできる.