Registry について

このページでは、オープンソースである Docker Registry を使って、独自にレジストリを提供する情報を示しています。 Docker Hub はホスト提供込みの Registry であり、さまざまな機能を追加することができます。 たとえばチーム、組織、ウェブフック、自動ビルドなどです。 詳しくは Docker Hub を参照してください。

Registry とは、名前つき Docker イメージを保持し、さまざまなタグバージョンを入手可能とする、保存および配信システムです。

例: distribution/registry というイメージに対して、2.02.1 といったタグづけを行います。

Registry のユーザーは Docker のプッシュやプルを行うコマンドを使って、対話的に操作を行います。

例: docker pull registry-1.docker.io/distribution/registry:2.1

ストレージ機能そのものの実現はドライバーに委ねられています。 デフォルトのストレージドライバーは、ローカルの Posix ファイルシステムです。 これは開発環境、あるいはごく小さなデプロイ環境に適しています。 ストレージドライバーを追加する機能がサポートされているので、S3、Microsoft Azure、OpenStack Swift、Aliyun OSS といったものが利用されます。 これ以外のストレージバックエンドを求めて、独自に ストレージ API を使ってドライバーを構築する方もいます。

配信するイメージへのアクセスは、セキュアであることが重要です。 このため Registry では、TLS と基本的な認証機能がネイティブにサポートされています。

Registry GitHub リポジトリには、さらに高度な認証機能や承認手法が含まれています。 Registry が大規模であったり公開デプロイされるものの場合には、こういった機能を通じて拡張することが求められます。

また Registry には 通知システム、処理に応じたウェブフック呼び出し、拡張可能なログ機能やレポート機能があります。 メトリックス収集を行う大規模システムに適応することができます。

イメージ名の理解

一般的な Docker コマンドにおいて用いられるイメージ名は、生成元にちなんでいます。

  • コマンド docker pull ubuntu は、公式の Docker Hub から ubuntu という名のイメージをプルするものです。 これは、より長いコマンド docker pull docker.io/library/ubuntu のショートカットです。
  • コマンド docker pull myregistrydomain:port/foo/bar は、myregistrydomain:port にあるレジストリにアクセスして、イメージ foo/bar をプルします。

Docker コマンドの中でイメージを取り扱うコマンドは、これ以上にさまざまなものがあります。 詳しくは Docker Engine ドキュメント を参照してください。

利用例

独自のレジストリを稼動させることにすれば、CI/CD システムと統合し補完するような優れたソリューションとなります。 ごく普通のワークフローとして、リビジョン管理システム上のソースコードをコミットすると、CI システム上においてビルドを行うといったことが可能です。 ビルドが成功すれば、新たなイメージを Registry にプッシュするという流れになります。 Registry からの通知をもとにして、ステージング環境へのデプロイを行うこともできます。 あるいは新たなイメージが利用可能になったことを、他システムに通知することもできます。

また極めて重要な機能として、大量のマシンに向けて新たなイメージをすばやくデプロイすることができます。

そして独立したネットワーク環境にイメージを配布する最善の方法が提供されます。

必要事項

Docker には十分に慣れていることが必要です。 特にイメージのプッシュやプルに関する知識が必要です。 デーモンと CLI の差異について理解した上に、さらに最低でもネットワークに関する基本的な知識も必要です。

レジストリを使い始めることはとても簡単なことですが、さらにこれを本番環境において用いるためには、操作スキルが求められます。 他のサービスを利用する際にも必要となるスキルです。 当然のことながら、システムの可用性、スケーラビリティー、ログ出力やログ処理、システム監視、セキュリティの初歩については、理解しているべきものです。 特に HTTP や全般的なネットワーク通信については十分理解できていて、さらに Go 言語を理解していれば確実に役立ちます。 高度な操作やハッキングを行うのであれば、さらに有用です。

次は

Registry のデプロイ に進んでください。

registry, on-prem, images, tags, repository, distribution, use cases, requirements