DockerコミュニティがWindowsでネイティブに実行される場合、なぜHyper-vが必要なのですか?つまり、ネイティブでは、Docker-EngineがWindowsで命令を実行できることを意味していませんか? Linux VMを起動し、その中で実行されるように見えます。
私には、docker-toolboxはLinuxを実行するOracleハイパーバイザーを使用し、DockerコミュニティはLinuxを実行するHyper-Vを使用しているようです。私が見落としている別の重要な違いはありますか?
これは正しいです? Wordの「ネイティブ」が間違っていることを理解していますか、DockerがWordを誤って使用しているのですか、それとも他に欠けている側面がありますか?
私が尋ねている理由は、コミュニティ版ではDocker-machineを使用していないことに気づいたからであり、なぜそうなのか疑問に思っています。 Docker Engineはそうではありませんが、docker-machineはWindowsでうまく動作しますか?私はWordドッカーが過負荷であり、おそらくこの場合混乱を招くと思います:)
前もって感謝します!
WindowsのDockerサポートには、いくつかのバリアントがあります。
Docker Toolbox。これには、VirtualBox内でboot2dockerイメージをスピンアップするDocker Machineが含まれます。これらは、VM内のLinuxカーネルで実行されるLinuxコンテナーです。これはもともとWindowsユーザーにとって唯一のオプションでした。
Windows用のDockerHyper-Vを使用してLinuxKitに基づいてMoby VMを実行し、Linuxイメージを実行します。 LinuxKitはコンテナーベースのLinux OSを提供し、エンドユーザーにVMのように見えないようにする統合があります。たとえば、VirutalBox VMのIPの代わりに127.0.0.1を使用できます。 Hyper-Vが使用可能で、WindowsでLinuxコンテナーを実行する場合、これが推奨されるオプションです。
Windows Serverコンテナーは、同じホストOS上でWindowsバイナリを実行します。これは、Linux OS上のLinuxコンテナーがVMを必要としない方法と同様です。
Hyper-V Containers。これは、追加の分離のために別のVM内でWindowsバイナリを実行します。
後者の2つのオプションの詳細については、 Microsoftのドキュメント をご覧ください。
重要なのは、2016年などのサポートされているサーバーにDocker for Windowsをインストールする場合、オプション2、3、および4を切り替えられることです。 LinuxおよびWindowsコンテナーの場合、 設定の切り替え があり、実行中のすべてのコンテナーとコマンドに影響します。また、Windows ServerコンテナーとHyper-Vコンテナーの間には、--isolation
コマンドラインにdocker run
オプションがあります。したがって、オプション3のみが必要な場合でも、2と4をカバーするためにHyper-Vのサポートが必要であると思います。
Windowsは、 "Hyper-v Isolation"に加えて "Process Isolation"をサポートしています。
Windowsのプロセス分離コンテナは、仮想化の追加レイヤーなしで実行されます(Linuxのdockerで慣れているものと同様)。これは、OPが「ネイティブ」コンテナを参照するときに探しているものだと思います。
プロセス分離のサポートはまだかなり新しいですが、Windows Server 2019およびWindows 10の最新バージョンは、hyper-v仮想ホストの余分なオーバーヘッドなしで、実際にWindowsコンテナーを実行できます。注意すべきことの1つは、Windowsコンテナのベースイメージのカーネルバージョンがホストマシンのカーネルバージョンと一致する必要があることです。したがって、おそらくhyper-vで実行しているのとまったく同じコンテナーを使用することはできないでしょう。
Windowsコンテナーバージョン互換性テーブル は、どのホストOSがprocess
またはhyperv
分離をサポートするかを強調しています。
-このページはそれを示していませんが、Windows 10 Update 1809はDockerプロセス分離をサポートする最初のアップデートですDocker Engineリリースノート に記載されています。
Windows Server Containersでは、実稼働で使用されるカーネルバージョンと構成を開発者に提供するために、Windows 10でHyper-Vの分離が必要です。これについては、About Windows container page で確認できます。
WindowsでのDockerのサポートはネイティブではなく、Dockerは最初はLinuxで実行されるように作成されました。したがって、WindowsでDocker CEを実行するための要件は次のとおりです。
Docker-ceはHyper-VでVMを作成するため、仮想化を有効にする必要があります。すべてのハイパーバイザーではハードウェア仮想化を有効にする必要があるため、この問題におけるHyper-Vは例外ではありません。Dockerfor Windowsインストーラー必要に応じてHyper-Vを有効にし、マシンを再起動します。
ハードウェア仮想化をサポートしない古いWindowsシステムの場合、Hyper-Vの代わりにドッカーコンテナーをホストするVMを起動するためにOracle Virtualboxを使用するDocker Toolboxを使用することをお勧めします。
私の理解では、Hyper-VはWindowsの仮想マシンソリューションの実装です。
Windowsで「ネイティブに」実行されるDockerは、実行するためにvirtualbox、vmware fusion、またはParallelsなどのサードパーティソフトウェアをインストールする必要がないことを意味し、代わりにWindows 10に付属するHyper-Vソフトウェアを使用します。