Rust言語による新しいDockerコンテナランタイム実装「Railcar」、オラクルがオープンソースで公開。なぜRustでコンテナランタイムを実装したのか?

2017年7月10日

Rust言語で実装したコンテナランタイムの「Railcar」を、オラクルがオープンソースとしてGitHubで公開しました。

Railcarはコンテナランタイム標準であるOCI(Open Container Initiative)に準拠してているため、Dockerのバックエンドとしても利用可能と説明されています。

fig

なぜDockerをRust言語で実装するのか

Railcarの公開を明らかにしたOracle Developers Blogに投稿された記事「Building a Container Runtime in Rust」によると、Rust言語でコンテナランタイムを実装した理由が次のように説明されています。少し長いのですが、引用します。

These days, almost all container utilities are in c or go. c is great for interacting with the linux kernel, but has security drawbacks. Go is great for speed of development and memory safety, but it has some limitations that create problems interacting with namespaces.

現在のところ、ほぼすべてのコンテナユーティリティがCまたはGoで記述されています。CはLinuxカーネルとやりとりするのに優れていますが、セキュリティ上の課題を抱えています。Goは、開発スピードや安全なメモリ管理の面で優れていますが、名前空間とのやりとりにおいて問題が生じるいくつかの制限があります。

Rust sits at a perfect intersection of these two languages: it has memory safety and higher-level primitives, but doesn't sacrifice low level control over threading and therefore can handle namespaces properly. It is a great choice for container utilities and we hope to see the rust community and the container community collaborate more in the future.

Rustはこれらの2つの言語の持つ長所を完全に備えています。安全なメモリ管理および高度なプリミティブを持ちつつ、スレッディングに対する低レベル制御も実現しているため、名前空間を適切に処理できます。これはコンテナユーティリティにとって最適であり、わたしたちはRustコミュニティとコンテナコミュニティが将来においてさらに協力し合うことを期待しています。
(日本語訳は「Oracle Blogs 日本語のまとめ」を参考にしました)

このブログによると、コンテナの起動時間の半分以上はカーネルのロック待ちであったことが判明。ロック待ちを発生させているおもな原因は、cgroupの作成と名前空間の作成であるとのこと。

そこで名前空間とcgroupをあらかじめ作成しておき、起動時にそれを特定することで、10ミリ秒以下でコンテナを起動可能になるはずだが、ただしそれにはコンテナランタイム仕様に多少の変更が必要になるとのこと。実装するためには今後の議論を待つことになります。

オラクルはRailcarと同時に、「Microcontainer」と呼ぶDockerイメージの最小化を実現するツール「smith」と、そのMicrocontainerのデバッグツールである「crashcart」のオープンソース化も明らかにしました

DockerはMoby Projectによってコンポーネント化された

いわゆるコンテナ型仮想化の実装であるDockerは、4月に発表されたMoby Projectによって、さまざまなコンポーネントの集合体として今後開発されていくことになりました。

現時点ではコンテナランタイムとして、最新バージョンのDockerではcontainerdが用いられていますが、今後はコンテナランタイムの標準であるOCIに準拠したさまざまなコンテナランタイムの実装が登場してきてもおかしくありませんし、実際にKubernetesのcri-oやCoreOSのrktなどこれまでもそうした動きはありました。

オラクルによるRailcarの実装は、そうしたコンテナランタイムの多様化の流れのなかで登場してきたものといえます。

そのオラクルは昨年9月にDocker対応の「Oracle Container Cloud」を正式にリリース、今年の4月には開発やテスト用途は無料で利用可能なDockerイメージのOracle DatabaseやWebLogicなどをDocker Storeで配布開始するなど、Dockerへの傾倒を強めつつあります。

ただしオラクルはこれまでLinux環境については独自ディストリビューションであるOracle Linux環境をメインにしてきた経緯があるため、Dockerでも独自の実装にこだわるのか、それとも多様な環境へ対応していくのか、今後の動向を見ていく必要があるでしょう。

あわせて読みたい

Docker コンテナ型仮想化 Oracle




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本