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

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

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

典型的な 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 というイメージを探すための命令です。

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

使用例

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

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

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

動作条件

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

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

次へ

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