TL;DR:
Q: Windows コンテナは Linux で実行できますか?
答え: いいえ。できません。
コンテナーは基盤となるオペレーティング システムのリソースとドライバーを使用しているため、Windows コンテナーは Windows でのみ実行でき、Linux コンテナーは Linux でのみ実行できます。
Q: しかし、Docker for Windows はどうでしょうか?それとも他の VM ベースのソリューションですか?
答え: Docker for Windows を使用すると、Linux の実行をシミュレートできます Windows 上のコンテナ 、ただし内部では Linux VM が作成されるため、Linux コンテナは Linux で実行され、Windows コンテナは Windows で実行されます .
おまけ:Windows での Linux Docker コンテナーの実行に関するこの非常に優れた記事をお読みください。
Q: では、.NET Framework 462 アプリケーションをコンテナーで実行したい場合、どうすればよいでしょうか?
答え: 場合によります。次の推奨事項を検討してください:
-
可能であれば、.NET Core に移行してください。 .NET Core は .NET Framework のほとんどの主要機能をサポートするため、.NET Framework 4.8 が .NET Framework の最後のバージョンになります
-
.NET Core に移行できない場合 - @Sebastian が述べたように、ライブラリを .NET Standard に変換し、2 つのバージョンのアプリケーション (.NET Framework 4.6.2 と .NET Core の 1 つ) を持つことができます。必ずしも明らかではありません。 Visual Studio はこれを (マルチターゲットで) 十分にサポートしていますが、一部の依存関係には特別な注意が必要になる場合があります。
-
(あまりお勧めしません) 場合によっては、Windows コンテナーを実行できます。 Windows コンテナーは、Kubernetes などのプラットフォームでのサポートが強化され、ますます成熟しています。ただし、.NET Framework コードを実行できるようにするには、約 1.4 GB を占める "Server Core" の基本イメージで実行する必要があります。同じまれなケースですが、コードを .NET Core に移行しても、イメージ サイズが 95 MB の Windows Nano サーバーで引き続き実行できます。
歴史のために古いアップデートも残す
更新 2:2018 年 8 月
Docker-for Windows を使用している場合、Windows と Linux の両方のコンテナを同時に実行できるようになりました :Docker Windows と Linux コンテナーの同時実行
ボーナス: 質問とは直接関係ありませんが、Linux コンテナー自体だけでなく、Kubernetes などのオーケストレーターも実行できるようになりました:Kubernetes is Now Available In 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 コンテナを実行するためのセットアップは、以前のアーキテクチャよりもはるかに簡単です ここで、Hyper-V Linux VM は、すべてのコンテナーと共に Linux Dockerdaemon を実行します。 LCOW を使用すると、Docker デーモンは Windows プロセスとして実行され (Docker Windows コンテナーを実行する場合と同じ)、Linux コンテナーを起動するたびに、Docker は、Linux カーネル、runc、およびコンテナー プロセスを実行する VM を実行する最小限の Hyper-V ハイパーバイザーを起動します。
Docker デーモンは 1 つしかなく、そのデーモンが Windows で実行されるようになったため、同じネットワーク名前空間で Windows と LinuxDocker コンテナーを並べて実行することがすぐに可能になります .これにより、Windows の Docker ユーザーにとって、多くのエキサイティングな開発および運用シナリオのロックが解除されます。
オリジナル:
@PanagiotisKanavos のコメントで述べたように、コンテナは仮想化用ではなく、ホスト マシンのリソースを使用しています .その結果、今のところ、Windows コンテナーは Linux マシン上で「そのまま」実行できません。
でも - VM を使用して実行できます - Windows で動作するため。 Linux ホストに Windows VM をインストールすると、Windows コンテナーを実行できます。
それを使用して、プロダクションでこのように実行しています 環境は最良のアイデアではありません.
また、この回答は詳細を提供します。
いいえ、Windows コンテナーを Linux で直接実行することはできません。
ただし、Windows で Linux を実行することはできます。
Windows Server 2016 には、Ubuntu OS のベース イメージがパッケージ化されています (2016 年 9 月のベータ サービス パック以降 )。これが、Windows で Linux を実行できる理由であり、それ以外の場合は実行できません。こちらをご覧ください。 ついに、Docker の LinuxKit を使用して Windows で Linux コンテナーを実行できるようになりました
トレイ メニューの Docker を右クリックして、OS コンテナー Linux と Windows を切り替えることができます。