web-dev-qa-db-ja.com

DockerがWindowsでネイティブに実行される場合、なぜhyper-vが必要なのですか

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ドッカーが過負荷であり、おそらくこの場合混乱を招くと思います:)

前もって感謝します!

27
TigerBear

WindowsのDockerサポートには、いくつかのバリアントがあります。

  1. Docker Toolbox。これには、VirtualBox内でboot2dockerイメージをスピンアップするDocker Machineが含まれます。これらは、VM内のLinuxカーネルで実行されるLinuxコンテナーです。これはもともとWindowsユーザーにとって唯一のオプションでした。

  2. Windows用のDockerHyper-Vを使用してLinuxKitに基づいてMoby VMを実行し、Linuxイメージを実行します。 LinuxKitはコンテナーベースのLinux OSを提供し、エンドユーザーにVMのように見えないようにする統合があります。たとえば、VirutalBox VMのIPの代わりに127.0.0.1を使用できます。 Hyper-Vが使用可能で、WindowsでLinuxコンテナーを実行する場合、これが推奨されるオプションです。

  3. Windows Serverコンテナーは、同じホストOS上でWindowsバイナリを実行します。これは、Linux OS上のLinuxコンテナーがVMを必要としない方法と同様です。

  4. 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のサポートが必要であると思います。

16
BMitch

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リリースノート に記載されています。

2
dk.

Windows Server Containersでは、実稼働で使用されるカーネルバージョンと構成を開発者に提供するために、Windows 10でHyper-Vの分離が必要です。これについては、About Windows container page で確認できます。

1
Neha

WindowsでのDockerのサポートはネイティブではなく、Dockerは最初はLinuxで実行されるように作成されました。したがって、WindowsでDocker CEを実行するための要件は次のとおりです。

  1. Docker-ceはHyper-VでVMを作成するため、仮想化を有効にする必要があります。すべてのハイパーバイザーではハードウェア仮想化を有効にする必要があるため、この問題におけるHyper-Vは例外ではありません。Dockerfor Windowsインストーラー必要に応じてHyper-Vを有効にし、マシンを再起動します。

  2. ハードウェア仮想化をサポートしない古いWindowsシステムの場合、Hyper-Vの代わりにドッカーコンテナーをホストするVMを起動するためにOracle Virtualboxを使用するDocker Toolboxを使用することをお勧めします。

1
Lea Klein

私の理解では、Hyper-VはWindowsの仮想マシンソリューションの実装です。

Windowsで「ネイティブに」実行されるDockerは、実行するためにvirtualbox、vmware fusion、またはParallelsなどのサードパーティソフトウェアをインストールする必要がないことを意味し、代わりにWindows 10に付属するHyper-Vソフトウェアを使用します。

0
Vice