Docker レジストリ の理解¶
レジストリ(registry)とは、ストレージとコンテント配送システムであり、Docker イメージの名前を異なったタグを付けられたバージョンで保持します。
注釈
イメージ distribution/registry
には 2.0
と 2.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 言語に慣れているのが望ましいでしょう。
次へ¶
レジストリのデプロイ に進みましょう。