1. ホーム
  2. linux

[解決済み】WindowsコンテナをLinux上でホストすることは可能ですか?

2022-05-01 19:32:38

質問

Linux上でWindowsコンテナを動作させることは可能ですか?シナリオは、Windows コンテナで書かれたアプリケーションをベースにしています。 .NET (古いネット)と Linuxユーザー を提供するために、Dockerでこれを実行したい。 net462 で書かれたAPIは localhost .

からベータ版を使用しています。 Windows版Docker Desktop .

もしそうでないなら、なぜ Windows では Linux コンテナを実行できて、その逆はできないのでしょうか?


ある程度時間が経過し、この質問はよくあることなので。ここで一つ付け加えておくと、回避策は新しいネットスタンダードを使用することです。それによって、私はパック 4.6.2 フレームワークを新しいライブラリに統合しました。

どのように解決するのですか?

TL;DR。

Q: Windows コンテナは Linux 上で動作しますか?

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

コンテナは、基盤となるOSのリソースやドライバを利用しているので、WindowsコンテナはWindowsのみで、LinuxコンテナはLinuxのみで実行することができます。

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

A: Windows版Dockerを使用することで、以下のようなシミュレーションが可能です。 リナックス コンテナ ウィンドウズ しかし、ボンネットの中では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 Coreに移行する必要があります。 は、.NETフレームワークの最終バージョンとなる

  • .NET Core に移行できない場合 - @Sebastian が言及したように - ライブラリを .NET標準 .NET Framework 4.6.2と.NET Coreの2つのバージョンを持つことができますが、これは必ずしも明らかではありません。Visual Studioは(マルチターゲットで)かなりうまくサポートしていますが、いくつかの依存関係は特別な注意を必要とする場合があります。

  • (あまりお勧めしません) 場合によっては、Windowsコンテナを実行することができます。Windowsコンテナはどんどん成熟してきており、以下のようなプラットフォームでより良いサポートが提供されています。 クーベルネッツ . しかし、.NET Frameworkのコードを実行できるようにするには、約1.4GBを占有する"Server Core"のベースイメージ上で実行する必要があることに変わりはありません。同じように稀なケースとして、コードを .NET Core に移行しても Windowsナノサーバー イメージサイズは95MBです。

古いアップデートも履歴として残す

アップデート2:2018.08

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

ボーナス 質問とは直接関係ありませんが、Linuxコンテナそのものだけでなく、Kubernetesなどのオーケストレータも実行できるようになりました。 KubernetesがDocker Desktop Stable Channelで利用可能になりました。

2018年時点の更新情報です。

一般的なオリジナル回答は正しい。 しかし 数ヶ月前、dockerは 実験的機能LCOW ( GitHub公式リポジトリ ).

から この記事 :

Docker for Windowsは、すでにLinuxのコンテナを走らせているのでは?そうなんです。 Docker for Windowsは、LinuxとWindowsのコンテナを実行することができます。 Hyper-V Moby Linux VMを使用したLinuxコンテナ用(Docker for Windows 17.10では、このVMはLinuxKitをベースにしています)。

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

Dockerのデーモンは1つしかなく、そのデーモンは現在では、「Docker」ではなく「Docker」になっているため はWindows上で動作するため Windows と Linux を同時に動作させることが可能になります。 Dockerコンテナを横に並べて、同じネットワークの名前空間内で . これは は、多くのエキサイティングな開発および生産シナリオを開放することでしょう。 Windows上のDockerユーザー

オリジナルです。

PanagiotisKanavosのコメントにもあるように、コンテナは仮想化のためのものではありませんし ホストマシンのリソースを使用している . そのため、現時点では、Windows コンテナを Linux マシン上で "as-is"実行することはできません。

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

それを使って、IMHOはこの方法を 生産 の環境は、ベストなアイデアではないでしょう。

また この回答 は、より詳細な情報を提供しています。