Docker レジストリ の理解

レジストリ(registry)とは、ストレージとコンテント配送システムであり、Docker イメージの名前を異なったタグを付けられたバージョンで保持します。

注釈

イメージ distribution/registry には 2.02.1 のタグがあります。

ユーザは docker push と pull コマンドを使い、レジストリを通信できます。

注釈

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

ストレージは自身のドライバに依存します。デフォルトのストレージ・ドライバはローカル posix ファイルシステムであり、開発や小さな環境で扱い易いです。S3、Microsoft Azure、Ceph Rados、OpenStack Swift、Aliyun OSS のようなクラウド・ベースのストレージをサポートしています。他のストレージ用のバックエンドを探しているのであれば、自分自身でドライバを実装するための ストレージ API をご覧ください。

保管されているイメージに対するアクセスのセキュリティを最高にするため、レジストリは TLS と基本認証をネイティブにサポートしています。

レジストリの GitHub リポジトリには、高度な認証や認証手法に関する情報があります。そこでの手法を使えば、とても大きな、あるいはパブリックへのデプロイといった拡張が期待できるでしょう。

あとは、レジストリには堅牢な 通知 通知システムを提供しており、何らかの動作に対応してウェブフックの呼び出しや、ログ記録やレポートの拡張、大規模な環境からのメトリックを収集を簡単にします。

イメージの名前付けを理解

典型的な docker コマンドで用いられるイメージ名には、起点(origin)を反映します。

  • docker pull ubuntu 命令は、公式の Docker Hub から ubuntu という名称のイメージを取得します。これは、長い docker pull docker.io/library/ubuntu コマンドを短くしたものです。

  • docker pull myregistrydomain:port/foo/bar は、docker に対して myregistrydomain:port にあるレジストリで foo/bar というイメージを探すための命令です。

Docker がイメージをやりとりするコマンドの詳細については、 公式の Docker engine ドキュメント をご覧ください。

使用例

自分自身のレジストリを CI/CD システムと統合・補完することは良い使い方です。典型的なワークフローは、ソースのリビジョン管理システムにコミットすると、それをトリガとして CI システムで構築を開始し、構築が成功するとレジストリに対して新しいイメージを送信します。レジストリからの通知によって、ステージング環境へのデプロイや、他のシステムに対して新しいイメージが利用できるようになったと伝えることも可能です。

あるいは、新しいイメージを大規模なクラスタ上のマシンに迅速に展開するだけのコンポーネントとしても使えます。

他には、隔離されたネットワークにおいて、イメージを配布するのにも良い方法でしょう。

動作条件

Docker に完全に慣れ親しんでいる必要があります。特にイメージの送信と取得に関してです。そして、デーモンと CLI の違いについての理解も必要ですし、少なくとも基本的なネットワーク機能については掴んでおく必要があります。

また、リポジトリの作成をかなり簡単に行えるようにしていますが、プロダクション環境においては他のサービスと同じように運用スキルが必要です。システムの可用性、スケーラビリティ、ログ記録とログ設定、システム群のモニタリング、セキュリティなどにも慣れている必要があります。高度な運用やハッキングには、http に対する高い理解と、ネットワーク通信全般の理解に加え、Go 言語に慣れているのが望ましいでしょう。

次へ

レジストリのデプロイ に進みましょう。