runCの紹介:軽量のユニバーサルコンテナランタイム

Dockerの配管のスピンアウト:パート1:runCの紹介

インフラ配管について

Dockerのようなプラットフォームを構築するには、多くのインフラストラクチャ配管が必要です。実際、過去2年間で、コードベースは数万行のコードに成長しました。その約50%は配管です! インフラストラクチャ配管は、可能な限り最も信頼性が高く簡単な方法で基本的な基本タスクを実行する小さなソフトウェアツールで構成されています。 特に配管が世界のインターネットインフラストラクチャをまとめているものであることを考えると、目に見えず、過小評価されています。

Dockerを構築するために、Linux、Go、lxc、aufs、lvm、iptables、virtualbox、vxlan、mesosなど、領事、systemdなどの大量の配管を再利用しました。リストは続きます。 Dockerは、この配管の作成に貢献した何千人もの人々なしでは不可能でした。配管が利用できなかったり、十分でなかったりしたとき、Dockerコミュニティの助けを借りて、独自の配管もいくつか構築しました。 そして、貢献の量と範囲が拡大するにつれて、基礎となる配管の質と量も拡大しました。 Dockerプラットフォームを構成する数万行のコードのうち、約50%が配管です。 Docker には、Linux と Windows の両方のネイティブ機能と対話するための配管があります。ネットワーキング用の配管があります。サービス検出マスター選挙安全;もっと。

インフラストラクチャ配管マニフェスト

インフラストラクチャ配管を作成して再利用する方法は、Dockerプロジェクトの基本です。 私たちのアプローチは、「インフラストラクチャ配管マニフェスト」と呼ばれる3つの基本原則に要約されます。

可能な限り、既存の配管を再利用し、改善に貢献してください。

新しい配管を作成する必要がある場合は、再利用しやすくし、改善に貢献できます。 これにより、利用可能なコンポーネントの共通プールが拡大し、誰もが恩恵を受けます。

Unixの原則に従ってください:いくつかの単純なコンポーネントは、単一の複雑なコンポーネントよりも優れています。

多くの単純なコンポーネントをより洗練されたシステムに組み合わせるために使用できる標準インターフェイスを定義します。

この配管をDockerプラットフォームから分離して、インフラストラクチャ配管のベストプラクティスに従って他のインフラストラクチャ配管工が再利用できるようにするという多くの需要がありました。 本日、私たちはまさにそれを行っていることを発表できることを嬉しく思います!

すべてのDockerインフラストラクチャ配管のスピンアウト

今日から、Dockerプラットフォームからすべてのインフラストラクチャ配管のスピンアウトを開始します。 これは大きな問題であり、Dockerプロジェクトの導入以来の最も重要なアーキテクチャの変更です。これには、Docker にとって多くの利点があります。

  • Docker を運用環境にデプロイする場合: これにより、Docker がより運用しやすくなります。 その下にある配管がよりきれいに分離されるため、プラットフォームはよりモジュール化されます。これにより、 スケーリング、トラブルシューティング、セキュリティ保護カスタマイズが容易になります。
  • Dockerをお気に入りのツールと統合する場合:すべての配管が標準インターフェイスを公開するため、各コンポーネントが潜在的な統合ポイントになります。

本日の DockerCon で、スピンアウトされる最初の配管コンポーネントの発表を開始しました。 しかし、やるべきことはまだたくさんあります。 私たちは、すべてのDOCKERコントリビューターと世界中のすべてのインフラストラクチャ配管工に、この取り組みに参加し、DOCKERの配管に貢献するのを手伝ってくれるよう呼びかけています。

今日は、最も有名な配管であるOSコンテナランタイムを紹介します。

runC: ユニバーサル コンテナー ランタイムの紹介

Dockerは、分散アプリケーションを構築、出荷、実行するためのプラットフォームであり、多くの場合、さまざまなハードウェアとOS構成を使用して、多くのマシン間で分散方式でアプリケーションを実行します。 これを可能にするには、基盤となるホストの詳細を抽象化できるサンドボックス環境が必要です (移植性のため)、アプリケーションの完全な書き直しを必要とせず (ユビキタスのため)、過度のパフォーマンス オーバーヘッドを発生させることなく (スケールのため)。

過去5年間で、Linuxはこの種の抽象化を可能にする機能のコレクションを徐々に獲得してきました。 Windowsは、次のバージョン10で、同様の機能も追加しています。 これらの個々の機能には、"コントロール グループ"、"名前空間"、"seccomp"、"機能"、"apparmor" などの難解な名前が付けられています。 しかし、総称して、それらは「OSコンテナ」または時には「軽量仮想化」として知られています。

Dockerはこれらの機能を多用し、有名になりました。 「コンテナ」は実際には複雑で、時には難解なシステム機能の配列であるため、それらを単に runCと呼ぶ統一された低レベルコンポーネントに統合しました。 そして今日、私たちはrunCをスタンドアロンツールとしてスピンアウトし、世界中のインフラストラクチャ配管工が配管として使用しています。

runC は、軽量でポータブルなコンテナー ランタイムです。 これには、コンテナーに関連するシステム機能と対話するために Docker が使用するすべてのプラミング コードが含まれています。 次の原則を念頭に置いて設計されています。

  • セキュリティを重視した設計。
  • 今日、本番環境で大規模に使用できます。
  • Dockerプラットフォームの残りの部分への依存はなく、コンテナランタイムのみであり、他には何もありません。

人気のあるrunC機能は次のとおりです。

  • ユーザー名前空間を含む Linux 名前空間の完全サポート
  • Linuxで利用可能なすべてのセキュリティ機能のネイティブサポート:Selinux、Apparmor、seccomp、コントロールグループ、機能ドロップ、pivot_root、uid / gidドロップなど。 Linuxがそれを行うことができれば、runCはそれを行うことができます。
  • Parallels の CRIU チームの協力によるライブマイグレーションのネイティブサポート
  • Windows 10 コンテナーのネイティブ サポートは、マイクロソフトのエンジニアによって直接提供されています
  • Arm、Power、Sparcのネイティブサポートを計画し、Arm、Intel、Qualcomm、IBM、およびハードウェアメーカーのエコシステム全体から直接参加してサポートしました。
  • 最先端のハードウェア機能(DPDK、sr-iov、tpm、セキュアエンクレーブなど)のネイティブサポートを計画しています。
  • Google のエンジニアが本番環境にコンテナをデプロイした経験に基づいて提供したポータブル パフォーマンス プロファイル。
  • 正式に指定された構成形式であり、Linux Foundation の後援の下で Open Container Project によって管理されます。 言い換えれば、それは本当の標準です。

runCの目標は、標準コンテナをどこでも利用できるようにすることです

実際、runCのコード自体をOCP財団に寄付することにしました。 OCPはLinux Foundationと同じように機能するように設計されているため、メンテナ(コンテナに焦点を当てたさまざまな企業や愛好家の従業員を組み合わせたもの)はほとんど放っておかれ、可能な限り最も素晴らしいソフトウェアを書き続けることを期待しています。

runCは現在利用可能であり、すでに活発に開発されています。 これは、Docker で使用されている実証済みの配管に基づいているため、Docker デプロイの一部として、または独自のカスタム プラットフォームで、今日の運用環境で使用できます。 皆様のご貢献をお待ちしております!

runCは本日 https://github.com/opencontainers/runcでご利用いただけます


DockerCon 2015 の Docker News の詳細をご覧ください。

次回の Docker オンライン ミートアップに参加して、Docker 1.7 の最新機能のデモを含む DockerCon からのすべてのニュースを要約します。 ミートアップは6月29日月曜日の10:00 PDT / 19:00 CEST – 登録するには ここをクリックしてください !


ドッカーについてもっと知る