Docker Hub のミラーリング¶
使用例¶
皆さんの環境に、複数の Docker を動かすインスタンスがあると仮定します(例:Docker デーモンが複数の物理マシンあるいは仮想マシン上で動作)。イメージを使おうにも、どちらも毎回パブリックな Docker レジストリ(Docker Hub)から取得しなくてはいけません。ローカルにレジストリのミラーを設置することで、ローカルネットワーク上でイメージ取得により発生するトラフィックを抑制できるでしょう。
あるいは¶
あるいは、頻繁に使うイメージ群がありませんでしょうか。単純にそれをローカル上のプライベートなレジストリから取得することも可能です。
それ以外にも、イメージは Docker Hub にあるものではなく、全てが自家製の場合もあるでしょう。そのような場合、単純にローカルにあるレジストリでイメージを管理したいと思いませんか。これが最も簡単なシナリオです。
捕捉¶
現時点では、特定のプライベート・レジストリをミラーする機能がありません。Docker Hub のみミラー可能です。
解決策¶
レジストリは pull (イメージの取得)時、キャッシュするように設定可能です。このモードでは Registry は通常の全ての docker pull に応答し、全てのイメージをローカルに保管します。
どうしますか?¶
ローカルのレジストリ・ミラーに対して初めてイメージのリクエストがあると、Registry はパブリック Docker レジストリ(Docker Hub)からイメージを取得し、ローカルに保管した後、そのイメージを返します。引き続きリクエストがあれば、ローカルのレジストリ・ミラーは自分自身の保存領域からイメージのデータを提供します。
Docker Hub のイメージ内容が変わったら?¶
イメージの pull 時にタグを付けると、Registry はリモートの Docker Hub 上の最新版と内容が一致するかどうか確認します。もし一致しなければ、最新版の内容を取得し、ローカルにキャッシュします。
ディスクはどうですか?¶
利用頻度が高い環境では、古いデータがキャッシュとして残り続けるかもしれません。Registry にキャッシュしているデータを取得して利用している場合、ディスク容量を節約するため、定期的に古いデータを削除したほうが良いでしょう。キャッシュしているデータを消したとしても、またリクエストがあればリモートから取得し、再度キャッシュ化します。
Registry のベストなパフォーマンスやキャッシュの正常性を確保するには、ストレージに filesystem
ドライバを使うべきでしょう。
Registry のキャッシュを通して実行する¶
Registry を通してキャッシュしたイメージを取得できるようにするには、公式 Registry イメージを実行する方法が最も簡単です。
おなじバックエンド上に複数の Registry キャッシュをデプロイ可能です。1つめの Registry はリクエストを処理するだけでデータを取得しません。他の Registry のキャッシュ・クラスタが適切にデータを取り扱います。
キャッシュの設定¶
Registry が取得(pull)する時、キャッシュを通すように設定します。設定ファイルに proxy
セクションを追加する必要があります。
Docker Hub のプライベート・イメージにアクセスが必要であれば、ユーザ名とパスワードも指定できます。
proxy:
remoteurl: https://registry-1.docker.io
username: [username]
password: [password]
警告
ユーザ名とパスワードを指定するときは、プライベート・リソースに対する理解が非常に重要です。ユーザはあなたのミラーを通して Docker Hub のイメージにアクセス可能になります。そのため、リソースの非公開を保つために、ミラーに認証を取り入れるなど、安全を保つことが非常に重要です。
Docker デーモン・オプションの設定¶
Docker デーモンの起動時に --registry-mirror
オプションを指定する必要があります。
docker --registry-mirror=https://<my-docker-mirror-host> daemon
例えば、 http://10.0.0.2:5000 をミラーとして使いたい場合は、次のように実行します。
docker --registry-mirror=https://10.0.0.2:5000 daemon
注釈
どのようにセットアップするかは、ローカルホスト上の設定に依存します。環境によっては /etc/default/docker
の DOCKER_OPTS
環境変数に --registry-mirror
を追加します。
参考
- Registry as a pull through