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


239

それを実行することが可能であるWindowsのコンテナののLinux?このシナリオは、.NET(古いネット)で記述されたアプリと、これをDockerで実行してに記述されたAPI を提供することを望むLinuxユーザーにnet462基づいていlocalhostます。

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

いいえの場合、なぜWindowsはLinuxコンテナを実行でき、その逆はできないのですか?

編集:

しばらくしてから、この質問は人気があります。回避策は新しいネットスタンダードを使用することです。4.6.2フレームワークを新しいライブラリにパックすることができました。


4
不可能-Windowsコンテナーをビルドして実行するには、コンテナーをサポートするWindowsシステムが必要です。
ajtrichards 2017

5
では、なぜWindowsはLinuxコンテナを実行できるのでしょうか。今のところその逆はありませんか?
セバスチャン506563

10
@ Sebastian506563は、DockerがLinuxコンテナをWindowsで実行するために舞台裏でVirtualBox仮想化を実行するためです。理論的には、逆の可能性もあると思います。ドッカーが実装しなかっただけです。
Gregory Suvalian 2017

5
VMでは、各vmに独自のオペレーティングシステムがあります。コンテナには、ベースOSイメージがあり、各コンテナはベースの上に新しい薄層を追加しています。Dockerでは、このベースOSのLinuxベースです。つまり、Windowsコンテナはベースが異なるため、ベースを使用できません。 blog.risingstack.com/...
xenの-ダラ

3
@PanagiotisKanavosはアンサーを作成してください
セバスチャン506563

回答:


162

Update3:06.2019 コメントのいくつかは答えが明確ではないと言っています、私は明確にしようと思います。

TL; DR:

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

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

Q: Docker for Windowsはどうですか?または他のVMベースのソリューション?

A: Windows用ドッカーは、あなたが実行してシミュレートすることを可能にする、Linuxの上でコンテナをWindowsのが、ボンネットの下に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 Framework の最後のバージョンになります。
  • .Net Coreに移行できない場合-@Sebastianが述べたように、ライブラリを.Net Standardに変換し、.Net Framework 4.6.2と.Net Coreに1つずつ、2つのバージョンのアプリを作成できます。常に明白ですが、Visual Studioはそれを(マルチターゲティングで)かなりよくサポートしていますが、一部の依存関係には特別な注意が必要になる場合があります。

  • (あまりお勧めしません)場合によっては、Windowsコンテナーを実行できます。Windowsコンテナーはますます成熟しており、Kubernetesなどのプラットフォームでのサポートが向上しています。ただし、.Net Frameworkコードを実行できるようにするには、約1.4 GBを占める「Server Core」のベースイメージで実行する必要があります。同じまれなケースで、コードを.Net Coreに移行しても、イメージサイズが95 MBのWindows Nanoサーバーで実行できます。

歴史の古い更新も残す

アップデート2:08.2018 あなたはドッカー-ため、Windowsを使用している場合は、あなたが今、WindowsとLinuxコンテナの両方を実行することができ、同時に https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- and-linux-containers-simultaneously /

おまけ:質問に直接関係していませんが、Linuxコンテナー自体だけでなく、kubernetesのようなオーケストレーターも実行できるようになりました:https ://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stable-channel /

2018年に更新:

一般的に、元の答えは右である、しかし、数ヶ月前、ドッキングウィンドウは、追加実験的な機能の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 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コンテナーを実行できます。

それを使用して、IMHOをPROD環境でこのように実行することは最良のアイデアではありません。

また、この回答は詳細を提供します。


12
リンクされた回答は実際にはこれに関する詳細を提供していません-それはWindowsでLinuxコンテナを実行する方法を説明しているだけです(逆)。Windows VM内でDockerを実行することは可能ですが、これにはネストされた仮想化サポートが必要です。つまり、VMwareでは機能しますが、Virtualboxでは機能しません。
ラルフ、

3
答えにはたくさんの言葉がありますが、質問には答えていないようです。
キベリアス

2
質問に対する答えではありません。それはそれほど高くランク付けされるべきではありません
アモルファス

2
これはこの質問に対する答えではありません。Linuxでのdockerの実行は、Windowsでのdockerの実行とは著しく異なります。なぜこれが回答としてマークされるのですか?\
Ani

コンテナー=分離されたアプリ(特定のOS用に構築されたもの)を効率的に実行し、メモリ、ディスク領域、オーバーヘッドを削減し、ハードウェア使用率を効率化VM =使用例..さまざまな使用例でOS全体を実行... (OSごとにdiffマシンを購入する必要はありません..ユースケースで実際に複数のOSが必要な場合)、しかし、ハードな使用率はコンテナーと比較してそれほど大きくありません。JoyentのCTOによるすばらしいビデオ:youtube.com/watch
v

16

いいえ、Linuxで直接Windowsコンテナを実行することはできません。

ただし、Windows上でLinuxを実行することはできます。

Windows Server / 10には、ubuntu OSのベースイメージがパッケージされています(2016年9月のベータサービスパック以降)。これがLinuxをWindowsで実行できる理由であり、他の方法ではできません。こちらをチェックしてください。https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

トレイメニューのdockerを右クリックすると、OSコンテナLinuxとWindowsを切り替えることができます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


13
OPは、代わりにLinuxサーバーでWindowsコンテナーを実行することを検討しているため、これは質問に答えません。しかし、コメントなしで反対票を投じる人は好きではないので、賛成票を差し上げます
デイジー

1
@Karthikeyan V:それは質問に対する答えではないからです。
Stefan Steiger、2018

以前は何を言っていたのかはわかりませんが、最初のステートメントはあなたができないと言い、2番目のステートメントはあなたができると言っています。それはおそらく紛失したり混乱したりするものです。
StingyJack

9

仮想化とは異なり、コンテナー化は同じホストOSを使用します。そのため、Linuxで構築されたコンテナはWindowsでは実行できず、その逆も同様です。

Windowsでは、コンテナーのosと同じosを使用するには仮想化(Hyper-vを使用)を利用する必要があります。そうすれば、コンテナーを同じosで実行できるはずです。

Docker for Windowsは、Hyper-vに基づいて構築された類似のアプリであり、Linux DockerコンテナーをWindowsで実行するのに役立ちます。しかし、私の知る限り、LinuxでWindowsコンテナーを実行するのに役立つものはありません。


9

コンテナはOSカーネルを使用します。Windowsコンテナーは、実行するためにプロセスを利用します。したがって、理論的に言えば、WindowsコンテナはLinuxでは実行できません。

ただし、VMstyleソリューションを利用する回避策があります。

MacでVagrantとPackerを使用するこのソリューションを見つけたので、Linuxでも動作するはずです:https : //github.com/StefanScherer/windows-docker-machine

このVagrant環境は、Windowsコンテナを使用してMacBookで動作するDockerマシンを作成します。Docker for Mac LinuxコンテナーとWindowsコンテナーを簡単に切り替えることができます。

bashコマンドの実行 ここに画像の説明を入力してください

ヘッドレスバグラントボックスの構築

$ git clone https://github.com/StefanScherer/packer-windows
$ cd packer-windows

$ packer build --only=vmware-iso windows_2019_docker.json
$ vagrant box add windows_2019_docker windows_2019_docker_vmware.box

Dockerマシンを作成する

$ git clone https://github.com/StefanScherer/windows-docker-machine
$ cd windows-docker-machine
$ vagrant up --provider vmware_fusion 2019

Windowsコンテナーに切り替える

$ eval $(docker-machine env 2019)

7

ソリューション1-VirtualBoxの使用

ムハンマドSahputraがで提案されているこの記事は、実行することが可能であるのWindows OS内部のVirtualBox内- (グラフィカルインターフェイス無しVBoxHeadlessを使用)ドッカーコンテナ

また、VMネットワーク構成内のNATセットアップでは、ポート転送を行うことができます。これにより、Dockerコンテナーとの間でやり取りされるすべてのトラフィックをパススルーできます。これにより、最終的には、広い視野で、Linuxマシン上でWindowsベースのサービスを実行できるようになります。

これはDockerコンテナの典型的な使用例ではないかもしれませんが、問題に対する興味深いアプローチです。


解決策2-Wineを使用する

単純なアプリケーションの場合や、おそらくもっと複雑な場合は、Dockerコンテナー内でwineを使用してみてください。

このDockerハブページは、目標を達成するのに役立ちます。


数年前のWindowsのdocker-machineと同様に、Dockerがすぐにネイティブソリューションをリリースすることを願っています。


6

仮想マシン内でWindowsコンテナーを使用できます(ゲストOSは要件に一致する必要があります-Windows 10 ProまたはWindows 2016)。

たとえば、VirtualBoxを使用して、システム/アクセラレーション/準仮想化インターフェイス内でHyper-Vを有効にするだけです。

その後、エラーが発生してDockerが起動しない場合は、設定で「Windowsコンテナーに切り替え...」を使用してください。

(これはコメントとして受け入れられた回答に移動することができますが、そうするための十分な評判がありません)


3

Docker for WindowsはLinuxコンテナーを完全に実行できますが、その逆は理論的には可能ですが、実用上の理由により実装されていません。

最も明白なものは、Docker for WindowsはLinux VMを自由に実行できる一方で、Docker for LinuxはVM内で実行するためにWindowsライセンスを必要とすることです。

また、Linuxは完全にカスタマイズ可能であるため、Docker for Windowsで使用されるLinux VMは数MBにまで縮小され、コンテナーの実行に必要な最小限のものが含まれていますが、利用可能な最小のWindowsディストリビューションは約1.5 GBです。それは実用的なサイズではないかもしれませんが、Linux on Windowsの対応物よりもはるかに扱いにくいです。

誰かがWindowsライセンスにバンドルされたLinux対応のDockerバリエーションを販売してLinuxでWindowsコンテナを実行する準備ができていることは確かに可能ですが(そのような製品が存在するかどうかはわかりません)、肝心なことは避けられないということですWindowsベンダーロックイン価格を支払う:お金とストレージスペースの両方。


0

MSSQLと.NET CoreをLinux上で実行できるため、現在はLinuxコンテナ内で実行できます。

参照:https : //hub.docker.com/r/microsoft/mssql-server-linux/

また:https : //hub.docker.com/r/microsoft/dotnet/

もちろん、Linux専用にコンパイルされたバージョンがない限り、答えに対する直接の質問はもちろんです。


3
これは本当です-しかしそれは質問とは何の関係もありません。さらに、MS-SQLは単なるエンジンではありません(Linuxには、ファイルストリームやRがなく、エンジン全体ではありません)。
Stefan Steiger

あなたは一歩先を考える必要があります...なぜ彼は尋ねているのですか?これらのいずれかを実行したいので、彼が尋ねている場合:出来上がり。
dagelf

2
可能。しかし、私見、彼はおそらく質問をしているでしょう。彼はすでにそれを行っており、今ではLinux上でSSRS / SSASやReportViewerなどのWebフォームコントロールのようなものを実行する必要があります。
Stefan Steiger

Dockerイメージmicrosoft / dotnetは.Net Core用です。これは古い.Net 4.xとは完全に異なるため、.Net Coreで古い.Net用に設計されたアプリを実行できません
j123b567

3
これらはサポート.NET Coreしていますが、サポートしていません .NET。これらは2つのまったく異なる環境です。
Slavik Meltser、2019年

-1

WindowsコンテナーはLinuxで実行されておらず、LinuxコンテナーをWindowsで直接実行することもできません。


6
もう少し詳しく説明してもらえますか?
Matthieu 2017

18
Linuxコンテナーはwin 10で実行できます
Kugel

2
当時はそうだったと思うので、私はこの男に投票しました。ただし、Windows上のDockerでLinuxコンテナーを実行できるようになりました(DockerはMobyLinuxと呼ばれるVMで実行されます)。
JakeJ

実際、windowsはLinuxコンテナーを実行するために小さなLinux VMを実行します。それを見るためにあなたのHyper-Vのリソースを確認してください
TuğrulKarakaya
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.