16システム上で実行可能なDockerイメージの構築
4550 ワード
この本にはいくつかの実践的な練習があります.別のマシンを使用して勉強している場合は、Mac、Windows、Linux、Raspberry Piで同じ方法で実行されていることがわかります.それは偶然ではない.本書のすべてのDockerイメージをマルチアーキテクチャイメージとして構築しました.マルチアーキテクチャイメージは、各イメージが異なるオペレーティングシステムまたはCPUアーキテクチャに対して同じイメージ名を使用し、複数のバリエーションを持つレジストリに構築およびプッシュされます.いずれかのイメージを使用してコンテナを実行したり、別のイメージを構築したりすると、DockerはシステムのCPUとOSに一致する変換をインポートします.異なるアーキテクチャで同じイメージ名を使用すると、異なるイメージ変換が得られますが、同じアプリケーションであり、同じ方法で動作します.ユーザーにとっては非常に簡単なワークフローですが、画像パブリッシャーにとってはいくつかの努力が必要です.
この章では、マルチアーキテクチャ構築の作成方法について学習しますが、WindowsやArmを使用しないため、この構築をスキップする場合は、少なくとも第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:
このイメージをレジストリにプッシュし、Raspberry PiやAWSのA 1インスタンスなどの正規のArmマシンでコンテナを実行し、正常に動作します.【図16.2】「私の出力」を示す図である.ここでは、インテルシステム上にArmイメージを構築しました.
Dockerは、オペレーティングシステムやCPUアーキテクチャなど、システムの多くの情報を理解し、画像のインポートを試みたときにマッチングとして使用します.インポート画像はダウンロードレイヤだけではありません.また、圧縮レイヤを最適化して、実行画像を展開して準備することもできます.この最適化は、使用するイメージが実行中のアーキテクチャと一致している場合にのみ実行されます.一致していない場合はエラーが発生します.イメージを試行および実行することもできません.コンテナ.
TRY Linuxコンテナを実行するDockerエンジンを使用して検証できます.Microsoft Windowsイメージをダウンロードします.
アーチイメージを複数作成するには、次の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を使用して、各アーキテクチャに複数のアーキテクチャイメージを作成することもできる.
この章では、マルチアーキテクチャ構築の作成方法について学習しますが、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を使用して、各アーキテクチャに複数のアーキテクチャイメージを作成することもできる.
Reference
この問題について(16システム上で実行可能なDockerイメージの構築), 我々は、より多くの情報をここで見つけました https://velog.io/@springer/16-어떤-시스템이든-실행-가능한-Docker-이미지-구축テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol