Oracleは3つのオープンソースのコンテナユーティリティを発表した。Smithは、Open Container Initiative (OCI)のイメージに準拠したイメージビルダであり、単一の実行可能ファイルと依存物で構成される"マイクロコンテナ"を作成する。Crashcartはマイクロコンテナのデバッグツールで、Linuxバイナリのイメージを既存のコンテナにサイドロードできる。RailcarはRustベースのコンテナランタイムでOCIランタイム仕様を実装している。
Oracle Developer's Blogに投稿されたVish Abrams氏の記事によれば、Oracleは同社のクラウドサービスでコンテナを活用し多くのコンポーネントを動かしている。開発とプロダクション環境での運用から多くの知見が得られ、これらのツールが作られた。そして、Universal Permissive Licence 1.0とApache License 2.0のデュアルライセンスでオープンソースになった。コードはGitHubにある。
Abrams氏は、これらのツールのリリースの前段として、Oracle Developer's Blogに"The Microcontainer Manifesto and the Right Tool for the Job"と題した記事を書いている。この記事では、コンテナの標準的なビルドプロセスは"開発者にとっては理想的だが、結果として作成されたコンテナイメージによって運用担当者の仕事が難しくなっている"と説明している。Oracleはコンテナ技術へ投資し始めた2年前、コンテナ実行の"安定性とセキュリティ"を改善するのが主要な目的だ、と定義した。この記事は同社の初めてのコンテナ技術に関する発表だが、他のコンテナの実装の安定性とセキュリティは劇的に改善していると指摘している。
Abrams氏の説明によれば、Dockerコンテナのビルドに起因する問題は、Linuxオペレーティングシステム全体をコンテナイメージに入れることから生じている。巨大なイメージは管理用のレイヤを必要とする。また、権限昇格によって、Linuxユーザー空間全体で実行されているアプリケーションの脆弱性が突かれた場合、他の潜在的な攻撃も可能になる。脆弱性管理で言えば、標準のビルドプロセスでは、コンテナ内のどの依存ファイルが実際に使用されているかが不明であるため、コンテナを更新する必要があるかどうかを判断するのが難しくなる。これらの問題の多くは既存のコンテナシステムですでに対処されている。コンテナ専用OSやスクラッチコンテナの利用、User Namespaces、AppArmorのようなLinuxカーネルのセキュリティモジュール、CoreOSのClairのような静的脆弱性スキャナを使ったセキュリティスキャナコンテナの利用による対処だ。
Oracleのチームはプロダクション環境で見つかったこれらの問題に対処するため、"マイクロコンテナ"という新しい概念を定義した(Iron.ioとJBossで使われているマイクロコンテナとは意味が違うので注意)。マイクロコンテナとは、
- 単一の実行可能ファイルと依存物のみ含み、シェルやinitプロセスはない。
- 読み取り専用のルートファイルシステムで実行される。レイヤやOverlayFSはない(書き込みは分離されボリュームマウント経由で処理される)。
- すべての一時ファイルは/runに置かれる。すべての永続化書き込み(ログファイルやデータファイルlog files and data files)は/writeにされる。
- コンテナ単位で変更される必要がある構成ファイルは/readに配置。ボリュームマウントやKubernetesのconfigmap経由で変更される。
- ユーザーとグループのファイルシステムの所有権はない。すべてが1つのユーザーに所有され読み取りされる。
- ファイルシステムタイムスタンプはない。
- 再作成可能であり、同じイメージが作成される。
- アウトオブバンドでノードに展開され、イメージリポジトリのという概念はない。
マイクロコンテナの構築を簡単にするため、OracleはSmithをリリースした。このツールはGolangで作られている。このツールを使えば、yumリポジトリと(オプションで)RPMファイルからマイクロコンテナを構築できる。さらに、既存のDockerコンテナを"マイクロ化"できる。開発者が開発中にDockerツールを使用してコンテナを作成し、Smithを使用してコンテナを本番用のマイクロコンテナに変換することも可能だ。Smithは標準のOCI形式でイメージを作成するが、Dockerリポジトリからイメージをアップロードしてダウンロードすることもできる。
マイクロコンテナをプロダクションで使うように最小化すると、運用担当者が問題を診断したり対処したりするのが難しくなる。OSのツーリングが不足している体。ほとんどのデバッグはホストからできるが、コンテナが見ているようにファイルシステムを見る必要がある場合もある。Oracleはこの場合のツールとしてCrashcartを作った。Crashcartは、検査とデバッグの目的で、実行中のコンテナに一連のLinuxバイナリをサイドロードできる。サイドロードバイナリがなぜ難しいのか、Crashcartがこれをどのように達成するかについての詳細は、"Hardcore Container Debugging"という記事で解説されている。
Oracleが発表した3つ目のツールはRailcarだ。これはRustベースのOCIランタイム仕様の実装だ。参照実装のruncに似ているが、完全にRustで実装されている。"ガベージコレクタまたは複数のスレッドのオーバーヘッドを必要とせずにメモリの安全性"を実現するためだ。氏の説明によれば、システムユーティリティやCLIの構築にはとても便利であるが"Goはコンテナランタイムの開発言語としては不十分な選択肢"だった。というのは、名前空間とのやりとりの問題がある(Weaveworksのブログ記事に書かれている通り)体。Railcarの開発についての詳しい情報はOracle Developer's Blogの"Building a Container Runtime in Rust"という記事にある。
さらに詳しい情報はOracle Developer BlogとOracleのGitHubアカウントで見つかる。
Rate this Article
- Editor Review
- Chief Editor Action