OS XのOSレベルの仮想化(コンテナー)


31

古き良きchroot以外に、Mac OS X にオペレーティングシステムレベルの仮想化(または必要に応じてコンテナー)の実装が存在しないのはなぜかと思います。

カーネルの制限またはライセンスの制限によるものでしょうか?または、単純に誰も同じようなプロジェクトを立ち上げていませんか?

回答:


16

コンテナ化に必要な重要な要素は、ネットワーキングと他のサービスの分離ですが、分離だけでなく仮想化も含まれます。FreeBSD Jails、Linuxの「コンテナ」(より正確には「名前空間」)、およびSolaris / illumosゾーンはすべて、これらのオペレーティングシステムシステムサービスのある程度の「仮想化」を提供します。

仮想化により、これは、これらのサーバーが「コンテナー」内のものに対して利用可能(または潜在的に利用可能)であることを意味しますが、コンテナー外の同じホスト上の他のものを保護します。(たとえば、コンテナには独自のTCP / IPスタックがあり、独自のIPアドレス、ARPキャッシュなどがあります。)

OS(オペレーティングシステム)仮想化とは、一般的にこのタイプの「軽量」仮想化のことです。プロセスは仮想カーネルを認識しますが、内部ではすべて同じ実カーネルを共有します。そのカーネルは、コンテナー/仮想化の境界を越えないようにするための一種のハイパーバイザーとして機能します。(別の方法では、OSサービスが仮想化されます。)これをハードウェア仮想化と比較してください。仮想化されるのはハードウェアです。たとえば、デバイスはソフトウェアでエミュレートされ、コンテナで実行されるオペレーティングシステムに提示されます。これは非常に強力ですが、リソースを大量に消費します。各仮想マシンにはオペレーティングシステムの独自のコピーが必要です。

最近のmacOSには、Hypervisor.frameworkを介したネイティブハイパーバイザーサポートがあり、「XHyve」[FreeBSDのBHyveのポート]などのソフトウェアを許可します(macOSのdockerはこれを使用します)が、オペレーティングシステムサービスを完全に仮想化するために必要なサービスが不足しています。

実際、サンドボックスを提供するという作業は、システムコールがアプリケーションごとに異なる方法でインターセプトおよび処理される論理ポイントがすでにあることを意味するため、必要なものの多くはおそらくすでに存在します。しかし、それは完全な話からはほど遠いです-真の独立したネットワーク、IPC、および他の名前空間の実装は非常に多くの作業です。

Appleがこれを行わなかった最大の理由は、Appleが長年にわたってデータセンターでmacOSを実行するのに適したプラットフォームをリリースしていないのと同じ理由です-市場の需要の欠如、またはAppleのリーダーシップによる市場の需要の欠如の認識 彼らが注目したデスクトップとモバイルの焦点は、仮想macOSインスタンスをそれほど必要としません。(これは悲しいことです。なぜなら、仮想macOSをサポートしたいからです。たとえば、Travis CIでVM上でmacOSを実行するのは、Linuxコンテナに比べて時間がかかります)。


1
良い答え...のiOS開発者は安価な強力なLinuxラップトップを実行して、VPSホスティングプロバイダに自分のAPKをコンパイルすることができれば、それは自分のMBP市場を崩壊してしまうので、私の推測では、Appleは、サーバー上でOSXをサポートして回避している
スコットStensland

6

驚かれることでしょう-コンテナーは実際サポートされています-OS X(およびiOS)サンドボックスはそれらを使用するように進化しました。これらは10.7で導入され、現在は10.10およびiOS 8で事実上の標準になっています。後者では、(主にアプリケーションのセキュリティ上の理由により)アプリが自分自身しか見ることができないという点まで、プロセスまたはリソースを列挙するメソッドは、コンテナベースの結果を返すようになりました-Linux ipc名前空間に似ていますが、より強力です。


2
ただし、これらはサンドボックスであり、OS仮想化(コンテナー、ゾーン、刑務所など)ではありませんか?
smdvlpr

1
Dockerも仮想化ではありません。コンテナ!= VM​​。Dockerは基本的に、さまざまなカーネル機能、cgroups、chroot、階層化ファイルシステム、iptablesルーティングなどの多くをサンゴ化し、アプリケーションがシステムを自分自身に持っていると見なすようにプロセスのグループを分離し、セキュリティを向上させるためにそれらの環境を分離しますコンテナが互いに、またシステムと干渉する可能性を最小限にします。OSXコンテナはこの機能の一部を実現していますが、すべてではありません。ただし、おそらくcraftな十分なコーダーで実装できるものです。
シェーン

3
@ Technologeeks、OS Xのコンテナ/サンドボックスの参照資料を参照できますか?
ケンウィリアムズ

3

誰も本当にそれを望んでいないという答えになると思います。それは実行可能であるようです。これらのことは主に1つの目的で行われ、VPSベンダーのパフォーマンスを維持します。そして、VPSインスタンスがOS Xベースであることを望む人は本当にいません。


5
ご指摘ありがとうございます。私見では、コンテナの少なくとも別のユースケースがあります。それは、開発環境を作成することです。ところで、私もこの古い炎を見つけました:groups.google.com/forum
#!topic

密度の増加は、プロセスを独自の名前空間に分離することの素晴らしい副作用です。コンテナを使用すると、複数のアプリをより安全に実行でき、マシン上で実行できることをより細かく制御できます。これらの利点はiOSで使用され、セキュリティを強化し、アプリ同士の踏み込みを防ぎます。たとえば、VPS密度とはほとんど関係ありません。シングルサービスのマシンでさえ、セキュリティの恩恵を受けることができます。密度の改善はありませんが、コンテナーは依然として有用です。
GargantuChet

2

「古き良きchroot(8)」を使用している間に、私はOS XとNetBSDでのdockerの振る舞いを模倣する傾向のあるプロジェクトを始めました。音声として無料で、GitHubで入手できます。READMEにあるように、このプロジェクトはセキュリティでも生産でもありませんが、ワークステーション上で完全なスタックをネイティブにテストするのに役立ちます。


0

docker(私が理解しているように)はファイルシステムとネットワークを「仮想化」(階層化)するだけです(cpu / memは制限されています)ので、同じ機能がすべてあるはずですが、同じ方法で販売されていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.