Docker Hub 上の公式リポジトリ

Docker の 公式リポジトリ は Docker Hub 上において提供される、厳選された Docker リポジトリです。 これは以下のことを意識して提供されています。

  • 基本的なベース OS となるリポジトリを提供します。 (たとえば ubuntu , centos などのように)数多くのユーザにとってスタート地点となるものです。
  • 代表的なプログラミング言語環境、データストア、各種サービスといった、PAAS(Platform-as-a-Service)が提供するものにも似た、一時的な実現環境を提供します。
  • Dockerfileベスト・プラクティス の例として示し、わかりやすいドキュメントを提供します。 これによって Dockerfile を作成する際のリファレンスとなるようにします。
  • 適切なタイミングでセキュリティ・アップデートを適用するようにします。 これは特に重要なことです。 Docker Hub 上における公式リポジトリは、人気を得ているものが数多くあるからです。
  • ソフトウェア・ベンダに対して、製品の最新版や正規版を配布するチャネルとして提供します。 Docker Hub における組織(organization)アカウントもこの目的で利用することができます。 このアカウントを用いるのであれば、公開しようとするものに対して十分な検証がなくても、また制約を設けなくても、気楽に提供できます。

Docker 社としては、公式リポジトリに関わるさまざまな内容に関して、レビューと公開を担当する専門チームを支援しています。 このチームは、ソフトウェア開発元の保守担当、セキュリティ専門家、Docker コミュニティの幅広い方々と共同して作業を進めています。

公式リポジトリの保守は、ソフトウェア開発元の担当者が行うことが好ましいのは言うまでもありません。 しかしこれを厳密に要求することはしていません。 そもそも公式リポジトリを生成して保守していくことは、公開で行われている作業です。 GitHub 上にて公開で行われているため、そこに参加することが大いに推奨されています。 どなたであっても、フィードバック、コード提供、プロセス変更の提案、さらには新たな公式リポジトリの提案までもが提供できるわけです。

公式リポジトリを使うべきですか?

Docker を初めて利用するユーザは、公式リポジトリを用いてプロジェクトを構築することをお勧めしています。 このリポジトリには分かり易いドキュメントがあって、ベストプラクティスを示しています。 そして一般的な利用を前提にして設計されています。 上級者の方は Dockerfile を勉強する一環として、公式リポジトリをレビューしていただくことをお願いします。

公式リポジトリを取得した後に目指すことは、イメージサイズの最適化です。 たとえばプログラミング言語イメージには、たいていは完全なビルドツールチェーンが含まれていて、最適化コードによるモジュールをインストールできるようにしています。 上級者は独自のイメージをビルドする際には、プリコンパイル済ライブラリを必要な分のみ含めることで、容量を節約することができるかもしれません。

pythonruby のような数多くのプログラミング言語環境向けには -slim というタグをつけています。 これは最適化への要求を満たす目的で作られています。 この「slim」でも不十分に感じる方は、公式リポジトリ内のベース OS イメージから派生イメージを作り上げて、その後も保守を行っていただくことをお勧めします。 同じやり方を繰り返しても無駄かもしれないからです。

公式リポジトリの安全性はどうすればわかりますか?

Docker Hub 上の公式リポジトリに対しては、Docker Cloud の セキュリティ・スキャニング・サービス プレビュー版が提供されます。 このセキュリティ・スキャンから重要な情報が得られます。 つまり、どのイメージにセキュリティぜい弱性が含まれるか、プロジェクトにとって利用すべきセキュアなコンポーネントにはどのようなものがあるかを知らせてくれます。

Docker セキュリティ・スキャニングの結果を見るには、以下を行います。

  1. Docker Hub にログインできていることを確認します。 公式イメージはログアウトしていても見ることができます。 しかしスキャン結果を見るためにはログインしている必要があります。

  2. セキュリティ・スキャン結果を見たい公式リポジトリを表示します。

  3. タブ Tags をクリックします。 タグの一覧とともにセキュリティ・スキャンの概要をみることができます。

    ../_images/scan-drilldown.gif

タグの詳細ページにクリック移動すれば、イメージ内のどのレイヤに、あるいはレイヤ内のどのコンポーネントにぜい弱性があるかの詳細情報を見ることができます。 個々のぜい弱なコンポーネントをクリックすると、ぜい弱性に関する詳細が表示され、公式の CVE 報告へのリンクが示されます。

どうやったら参加できますか?

すべての公式リポジトリのページにはドキュメントが含まれていて、そのリポジトリに対する詳細が説明されています。 そしてその中に User Feedback の節があります。 たいていの場合 GitHub リポジトリには、公式リポジトリに対する Dockerfile が含まれており、さらに有効な issue トラッカーも提供されています。 一般的なフィードバックやサポートに関する質問は、Freenode IRC 上の #docker-library に対して行ってください。

どうすれば公式リポジトリを生成できますか?

高度なレベルで話をすると、公式リポジトリは、GitHub のプルリクエストという形での提案から始まります。 詳細な具体的な提案のあり方については、以下の GitHub リポジトリに示されています。

公式リポジトリ・チームは、コミュニティに貢献して頂ける方の助けも借りながら、正式に各提案をレビューし、提案者へのフィードバックを行っています。 ただし提案を受け付けてからレビューを開始するまでには、多少もたつくことがあるかもしれません。

レビューを行っていく際には、主観的な議論となることもあります。 そのような主観的な疑問は、「このイメージは汎用的に使えますか?」といった単純な質問に帰着します。 たとえば python の公式リポジトリは、幅広い Python 開発コミュニティにとって「汎用的に使えます」と言えます。 ところが「先週作った Python のアドベンチャーゲーム」といったあいまいな文章では、何も答えられません。

新たな提案が受け付けられたら、その提案者はイメージを常に最新状態とし、ユーザ・フィードバックに返信する責任があります。 公式リポジトリ・チームには、Docker Hub 上にイメージとドキュメントを公開する義務が発生します。 公式リポジトリを更新していくことは、レビューを行うことは少ないかもしれませんが、プルリクエストの作業に似ています。 公式リポジトリ・チームは、あらゆる活動を最大限管理し、品質リスクやセキュリティ問題の発生を抑えます。

参考

Official Repositories on Docker Hub
https://docs.docker.com/docker-hub/official_repos/