fbpx

[和訳]Dockerと containerd の統合 #docker

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本稿は Docker containerd integration (2016/4/13) の和訳です。

より高性能かつ小型化された優れた Docker エンジンを開発するには、既存の Docker エンジンのコンポーネントの中の幾らかを改良する必要があり、それぞれをプロジェクト化し研究するに至っています。

そのうちの一つが、コンテナ管理を行う Docker ランタイムです。runc のような独立したランタイムを使うにあたり、アプリケーション・スタックはもちろん 100 を超えるコンテナ管理にruncを追加するには、明確な統合ポイントが必要です。

コンテナ監視を Docker エンジン本体から別のデーモンに移す仕組みの開発を目的とした containerd プロジェクトを始動しました。

containerdは、OCI バンドルの起動とそのライフサイクル管理を完全にサポートします。

これにより、ユーザは自社システムの runc バイナリを別のランタイムに置き換えることができるようになります。また、Docker API を使用し続ける利点も得られるようになります。

では、なぜ新しいプロジェクトが必要なのでしょうか。なぜ問題そのものの解決ではなく、リファクタリングに時間をかけるのでしょうか。それは…

containerd はコンテナの並列起動による時間短縮を可能にします。つまり、本リリースを利用すれば、複数のコンテナを素早く同時に起動できます。一般のノート PC 上でも、コンテナ100台を同時に 1.64 秒で起動できました。1 秒間に コンテナ 60 台という計算になります。コンテナ起動に掛かる時間の多くは、syscalls やシステムレベルの操作に費やされます。コンテナ 100 台を同時起動する場合、多くの時間が ハードウェア/カーネルの処理待ち時間となってしまうため現実的ではありません。そこで、 containerd はコンテナ起動時のリクエスト処理や他の処理を、ロックフリーで行えるイベントを使用します。同時起動できるコンテナ数を設定することができます。デフォルトは 10 です。これにより多くの API リクエストがあっても、高負荷を掛けずにコンテナ起動を扱えるようになります。

containerd-e1450381335180

containerd との統合にはrunc も含まれるため、コンテナの起動方式を OCI ランタイム仕様に沿うように少し変更しました。Docker エンジンにリクエストを送信する時、イメージ管理は通常通り行います。しかし、その後にコンテナ用の OCI バンドルを作成します。バンドルには取得したイメージと API 経由で提供したランタイムの情報が含まれます。設定の作成後 Docker は、バンドルに含まれているコンテナのルートファイルシステムをマウントします。その後 containerd によるコンテナ起動が開始されます。

containerd API は非常にシンプルです。パフォーマンス向上とクライアントライブラリの簡易作成を可能にするために gRPC でビルドするのを決めました。API 経由のコンテナ起動リクエストは、OCI バンドルとコンテナの ID を呼びたすだけのものです。API をシンプルに保つために、新機能追加時は API への変更を最小限にします。

containerd は非常に小さなステータス(に関する情報)を保っています。コンテナの終了後は、Docker は生成されたバンドルを削除し、ランタイムステータスを破棄します。つまり、ディスク上のコンテナ用ランタイムステータスは、コンテナが起動している時にだけ存在します。

本リリースに含まれるライブマイグレーションや起動中コンテナへの再アタッチ等の機能により、将来の Docker アップグレードによるコンテナへの影響を防ぎます。

最新のDocker エンジン1.11リリースで、 containerd をぜひお試しください。ノート PC にインストールするには、Docker Toolbox をダウンロードします。その他のプラットフォームにインストールするには、インストールガイドを参照してください。

Dockerに関してさらに学ぶには

・Docker初心者は、10分のオンラインチュートリアルをご覧ください。
・画像、自動構築などを無料のDocker Hubアカウントでシェアしてみましょう。
・Docker 1.10リリースノートを読んでみましょう。
Docker Weeklyを購読してみましょう。
・次に予定されているDockerオンラインMeetupに登録してみましょう。
・次に予定されているDocker Meetupに参加してみましょう。
DockerCon 2016に登録してみましょう。
DockerCon EU 2015のビデオを見てみましょう。
Dockerコミュニティへの貢献を始めましょう。

新規CTA