[和訳]Unikernels でDockerを改善:Hyperkit,VPNkit,Datakitの導入 #docker
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は IMPROVING DOCKER WITH UNIKERNELS: INTRODUCING HYPERKIT, VPNKIT AND DATAKIT(2016/5/18) の和訳記事です。
人気の高いオペレーションシステムでDockerが可能な限りシームレスに使えるように、我々はネイティブDocker for Mac および Windows アプリの構築に懸命に取り組んでいます。Docker for Mac および Windowsには、Linux Dockerコンテナを起動するために必要なすべてを含みます。ツールによりホストからDockerコンテナに対し、ストレージとネットワークを効率的に橋渡しします。MacOS XとWindows の両方で透過的に機能しますので、第三者のソフトウェアを必要としません。
Dockerは常にオープンソース基盤上に構築されてきました。本日OSCON2016にて、Solomon Hykesがキーノートに登壇し、ますます増加する改革について語りました。オープンソースの共同開発が原動力となり、Dockerの歴史を作り上げたのです。今日、我々はDocker for Mac および Windowsデスクトップアプリケーションの原動力であるコア技術をオープンソース化します。既存のコードに加えて、更にオープンソースに寄与します。
Docker for Mac and Windowsの構築にはハードウェアの仮想化、埋め込み型のオペレーションシステム、そしてunikernel 技術が必要でしたが、エンドユーザーにその魔法をさらしてはなりませんでした。我々のアプリケーションの隠れた部分を見て、このソースコードが何をするのかを理解しましょう。そしてどのように寄与するか、またはプロジェクトにどのように活用するかを考えましょう。
Docker for Mac を実行すると、最新のDocker Engineの安定版リリースを含む、単一の埋め込み型Linuxインスタンスを実行するためだけに存在する軽量のスーパーバイザーを起動します。多くのハイパーバイザーと異なり、特別な管理者権限は必要ありません。OSに含まれるHypervisor Framework (OSX 10.10より利用可能)を利用するためです。このDockerアプリケーションは、Docker VMにLinuxとOSX/Windows 間を分かりやすくマッピングするホストネットワークとストレージ容量を供給するライブラリをまとめています。
本日我々は、これらを別のコンポーネント(構成要素)として、オープンソース化を発表します。これはDocker for Mac and Windowsのリリースをビルドするのに使用するのと同じソースコードです。新しいコンポーネントは次の通りです。
HyperKit: OSX上の軽量の仮想化ツールキット
Datakit: 分配された構成要素のための現代的パイプラインフレームワーク
VPNKit: 仮想ネットワークを埋め込むためのライブラリツールキット
これらのキットはそれぞれ個別に使うこともできますし、またはDocker for Mac or Windowsのような完全な製品と併用もできます。これはほんの始まりにすぎません。我々は将来、より多くの構成要素を、それらが成熟するにつれてオープンにします(例:ファイルシステム・ネットワーク)。Hyperkit, Datakit, そしてVPNKitは先駆的なプロジェクト群の始まりなのです。
HyperKit
Hyperkitは仮想化の軽量アプローチに基づいています。これはMacOS 10.10以降で提供されているハイパーバイザーフレームワークにより可能となります。Hyperkit アプリケーションはハードウェア仮想化を利用してVMを実行することができますが、権限の昇格や複雑な管理ツール群は必要ありません。
HyperkitはxHyveとbHyveプロジェクトを基礎としています。VPNKitやDatakitのような他のコンポーネントとの相互作用を容易にするため、Hyperkitには追加の機能がついています。Hyperkitの大部分がライブラリで構成されているため、unikernelライブラリにリンクするのは簡単です。例えば、OCamlで書かれたMIrageOS QCowライブラリを使用する、持続性のあるブロックデバイスのサポートを追加しました。
どのように貢献できるのか?
貢献できる領域は大きく3つあります。
- より多くのゲストオペレーションシステムの起動をサポート。Linuxは現状では唯一の「最上級の」サポートされたオペレーティングシステムです。FreeBSDでも起動はしますが、インストーラを実行する必要があるため、それほどシームレスではありません。Windows, OpenBSD, またはNetBSDで起動するために、より多くのBIOSサポートを追加するようなパッチも存在しますが、より多くの検証を要します。
- より高度な言語との連携をサポート。Hyperkitはライブラリとして構成されているため、通常の外部機能インターフェースを用いて高度言語のインターフェースにできます。
- ハイパーバイザー機能。停止・再開、ライブリロケーション、そしてハードウェアパフォーマンスカウンターのような従来のハイパーバイザー機能のいくつかはサポートされていません。Hyperkitが軽量で埋め込みが容易であるためには、残りのコード群を何らかのライブラリ風で追加する必要があります。
それぞれ独立した体制で上流プロジェクトに送られるため、どのような形であれ確実に貢献できます。
他にどのような使い方がありますか?
特定の目的または短命の仮想マシンはHyperKitにリンクすると便利です。これらはLinuxのような従来からのオペレーションシステム、またはHyperKitに移植されたunikernel プロジェクトであるかもしれません。
DataKit
Datakitは、gitと互換性のあるファイルシステムインターフェースとプロセスを調整する際に使うツールキットです。UNIXパイプラインの概念とPlan9 9Pプロトコルに立ち戻っていますが、モダンツイストに関しては、ローテキストではなくツリー構造データのストリームを使用しています。DataKitは、疎結合のプロセス間の複雑なワークフローを定義するのに役立ちます。その簡潔さは、バージョンがコントロールされているファイルシステムと相互作用するシェルスクリプトに匹敵する程です。
データフローに関して、DataKitのアプリケーションアーキテクチャを再考しました。「すべてがバージョン管理のファイル」であったgit時代の、その「すべてがファイル」というPlan 9の知恵を思い起こしました。Docker for Mac および WindowsではDataKitと9Pを大いに活用しているので、go-p9pもオープンソース化するつもりです。近代的なパフォーマント9Pライブラリfor GOです。
他にはどのような使い方がありますか?
DataKitを使用しているサンプルプロジェクトがあります。このレポジトリで、50行のシェルスクリプトに、連続的な統括システムを作成しています:
github.com/docker/datakit/tree/master/ci
また、READMEもGitHubでDataKit統括に触れています。DataKitは、データにおいてプロセスを調整する必要がある時、さらにはそのデータがバージョン管理されるようになって光らせる必要がある時など、どのような状況においても使用できます。
どのように貢献できるのか?
DataKitにおけるGitHub PRサポートはまだかなり基本的なものですので、この分野でさらに貢献することができるでしょう。DataKitはかなり用途が広いです。例えば、プロジェクトでの使用方法のシェアなどに使えます。
VPNKit
VPNKitは、ローEthernetネットワークトラフィックと、MacOS XまたはWindowsでそれに相当するソケットコールとの間で翻訳を行うネットワーキングライブラリです。MirageOS TCP/IP unikernelスタックをベースとする、OCamlで書かれたライブラリです。VPNKitは、ユーザースペースでネットワーキングプロトコルに精度の高い制御を行う必要がある際に役立ちます。ハイレベル言語においても伸張性があるという利便性もあります。
どのように貢献できるのか?
VPNKitは、Docker for Mac および Windowsにおけるすべてのコンテナトラフィックに傍受ポイントを提供します。パケットキャプチャと点検、特定のトラフィックパターンにフィルターをかけるプロトコルプロキシ、また、ウェブアプリケーションをデバッグするためのHTTPプロトコル視覚化までもサポートできます。
他にはどのような使い方がありますか?
VPNKitのサポートするエンドポイントタイプが増えれば、実際の作成や移送の負担なくネットワークトラフィックを検証できるようにもなるでしょう。アプリケーションコンポーネント間に軽量のオーバーレイネットワークを構築するのにも使用できるでしょう。
次のステップ
VPNKitとDataKitがDocker for Mac および Windowsで使用が始まったのは、極めて特定の目的を持ったコンポーネントとして、でした。それらをオープンソース化することで新たに生まれる可能性があります。私たちのアイデアを聞いても疲れるだけですから、あなたのプロジェクトを聞かせてください。問題に遭遇したら、それぞれのバグトラッカーに記録しておいてください。またはお望みであれば、特定のアイデアに関して議論を行っても良いです。
また、OSCONにいらっしゃる場合は、これらのプロジェクトの管理者のところへ来て協力をお願いします。会議室6で木曜午後3時から6時まで行うOSCON貢献セッションに来てください。Docker for Mac および Windowsの中身のさらなる詳細は、私が昨日OSCONで行ったトークのスライドをご覧ください。
まだのようでしたら、ぜひDocker for Mac および Windows betaに登録し、フィードバックを送ってください。汎用性向上のための改善に役立ちます。最後に、このリリースを行うにあたって、オープンソースに関して力を借りた皆さん、ありがとうございました。The Docker for Mac および Windowsの謝辞には、製品に直接役立った貢献を何百とリストアップしています。 そちらもチェックしてみてください。自身で製作をする際に役に立つことを願っています。
Dockerに関してさらに学ぶには
・Docker初心者は、10分のオンラインチュートリアルをご覧ください。
・画像、自動構築などを無料のDocker Hubアカウントでシェアしてみましょう。
・Docker 1.12リリースノートを読んでみましょう。
・Docker Weeklyを購読してみましょう。
・次に予定されているDockerオンラインMeetupに登録してみましょう。
・次に予定されているDocker Meetupに参加してみましょう。
・DockerCon 2016に登録してみましょう。
・DockerCon EU 2015のビデオを見てみましょう。
・Dockerコミュニティへの貢献を始めましょう。