Windows コンテナを Linux でホストできますか? 質問する

Windows コンテナを Linux でホストできますか? 質問する

Linux 上で Windows コンテナーを実行することは可能ですか? このシナリオは.NET (旧ネット) で記述されたアプリケーションに基づいており、これを Docker で実行したいLinux ユーザーはnet462、上で記述された APIを提供する必要がありますlocalhost

私はベータ版を使用していますWindows 用 Docker デスクトップ

そうでない場合、なぜ Windows は Linux コンテナーを実行できるのに、その逆はできないのでしょうか?


時間が経ち、この質問は人気のあるものなので、回避策として新しいものを使用することをここに付け加えておきたいと思います。.NET 標準4.6.2フレームワークを新しいライブラリにまとめることができました。

ベストアンサー1

要約:

Q: Windows コンテナは Linux 上で実行できますか?

A: いいえ、できません。

コンテナーは基盤となるオペレーティング システムのリソースとドライバーを使用しているため、Windows コンテナーは Windows でのみ実行でき、Linux コンテナーは Linux でのみ実行できます。

Q: Docker for Windows についてはどうでしょうか? あるいは他の VM ベースのソリューションについてはどうでしょうか?

A: Docker for Windows を使用すると、 Windows上でLinuxコンテナの実行をシミュレートできますが、内部では Linux VM が作成されるため、Linux コンテナは Linux 上で実行され、 Windows コンテナは Windows 上で実行されます

ボーナス: 読むこれはとても素晴らしい記事ですWindows 上で Linux Docker コンテナを実行する方法について説明します。

Q:では、.NET Framework 462 アプリケーションをコンテナー内で実行したい場合はどうすればよいでしょうか?

A:状況によります。次の推奨事項を検討してください。

  • 可能であれば、.NET Coreに移行してください。.NET Coreは.NET Frameworkのほとんどの主要機能をサポートしており、.NET Framework 4.8では.NETフレームワークの最後のバージョンになります

  • .NET Coreに移行できない場合は、@Sebastianが述べたように、ライブラリを次のように変換できます。.NET 標準、アプリケーションの 2 つのバージョン (1 つは .NET Framework 4.6.2 用、もう 1 つは .NET Core 用) がある場合、それが必ずしも明らかであるとは限りません。Visual Studio はこれをかなり適切にサポートしていますが (マルチターゲットを使用)、一部の依存関係には特別な注意が必要になる場合があります。

  • (あまり推奨されません) 場合によっては、Windowsコンテナを実行できます。Windowsコンテナはますます成熟しており、次のようなプラットフォームでのサポートが向上しています。クベネフィットしかし、.NET Frameworkコードを実行するには、約1.4GBを占める「Server Core」のベースイメージ上で実行する必要があります。まれに、コードを.NET Coreに移行しても、Windows ナノサーバー画像サイズは 95 MB です。

古いアップデートも歴史に残す

アップデート2: 2018年8月

Docker-for-Windows を使用している場合は、Windows コンテナーと Linux コンテナーの両方を同時に実行できるようになりました。Docker Windows コンテナと Linux コンテナを同時に実行する

ボーナス:質問とは直接関係ありませんが、Linux コンテナ自体だけでなく、Kubernetes のようなオーケストレーターも実行できるようになりました。Kubernetes が Docker Desktop 安定版チャンネルで利用可能になりました

2018年に更新:

元の回答は概ね正しいが、か月前にDockerが追加した実験的な機能 LCOW公式GitHubリポジトリ)。

からこの郵便受け:

Docker for Windows はすでに Linux コンテナーを実行していませんか? その通りです。Docker for Windows は、Hyper-V Moby Linux VM を介して Linux コンテナーをサポートし、Linux または Windows コンテナーを実行できます (Docker for Windows 17.10 の時点では、この VM は LinuxKit に基づいています)。

LCOW で Linux コンテナーを実行するためのセットアップは、 Hyper-V Linux VM がすべてのコンテナーとともに Linux Docker デーモンを実行する以前のアーキテクチャよりもはるかに簡単です。LCOW では、Docker デーモンは Windows プロセスとして実行され (Docker Windows コンテナーを実行する場合と同じ)、Linux コンテナーを起動するたびに、Docker は Linux カーネル、runc、およびコンテナー プロセスが実行される VM を実行する最小限の Hyper-V ハイパーバイザーを起動します。

Docker デーモンは 1 つしか存在せず、そのデーモンが Windows 上で実行されるようになったため、Windows と Linux の Docker コンテナーを同じネットワーク名前空間内で並行して実行することがすぐに可能になります。これにより、Windows 上の Docker ユーザーにとって、多くの魅力的な開発および運用シナリオが実現します。

オリジナル:

@PanagiotisKanavos のコメントで述べられているように、コンテナーは仮想化用ではなく、ホスト マシンのリソースを使用します。その結果、現時点では、Windows コンテナーを Linux マシン上で「そのまま」実行することはできません。

ただし、Windows 上で動作する VM を使用してこれを行うことができます。Linux ホストに Windows VM をインストールすると、Windows コンテナーを実行できるようになります。

そのため、私見では、本番環境でこのように実行するのは最善のアイデアではないでしょう。

また、この答えさらに詳しい情報を提供します。

おすすめ記事