Rust言語による新しいDockerコンテナランタイム実装「Railcar」、オラクルがオープンソースで公開。なぜRustでコンテナランタイムを実装したのか?
Rust言語で実装したコンテナランタイムの「Railcar」を、オラクルがオープンソースとしてGitHubで公開しました。
Railcarはコンテナランタイム標準であるOCI(Open Container Initiative)に準拠してているため、Dockerのバックエンドとしても利用可能と説明されています。
なぜ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でも独自の実装にこだわるのか、それとも多様な環境へ対応していくのか、今後の動向を見ていく必要があるでしょう。
あわせて読みたい
業務システムが出力したデータをExcelでもらえないか?/Google、デプロイ自動化ツール「Spinnaker 1.0」公開/SSRについて知るべきことほか、2017年6月の人気記事
≪前の記事
NTTコム、閉域網で接続可能なプライベートコンテナサービスを同社のクラウドで提供。コンテナ管理にはRancherを採用