コミュニティ イベントでいただいた Docker Hub ミラーに関するコメントへのお返事

先週のコミュニティ イベントにて Docker Hub ミラーについてご紹介した際に、 Twitter 経由でいくつかコメントを頂戴しました。
すこし時間が空いてしまいましたが、ここではいただいたコメントについて補足したいと思います。

単一障害点にならない? => 複数のミラーを構成することができます。

Docker デーモンの registry-mirrors パラメータは型が文字列の配列として定義されており、複数のミラーを指定することが可能です (手元の検証環境でも動作確認済)。
私がざっくり Docker デーモンのソースコードを調査してみたところ、 registry-mirrors での指定順にアクセスを試み、最後に Docker Hub 本体へのアクセスを試みるよう実装されているようです (ソース 1, 2)。
つまり、

  1. (運用コストが上がってしまいますが) 複数のミラーを構成することで、ミラーが単一障害点 (SPOF) となることを防げます。
  2. 仮にすべてのミラーが落ちている場合でも、 Docker Hub 本体がアクセス可能であればすぐには影響を受けずに済みます。 (回数制限の影響をいずれ受けることにはなりますが。。)

もっとも、個々のプロジェクトで設定をする方がプロジェクトにとってコントローラブルであってよいというご意見も一理あります。
総合的には、全プロジェクトの config.yml での auth ブロックや docker login コマンドの記述がどの程度困難か、 config.yml の保守性への影響は許容範囲内かなども考慮の上、ミラーの必要性を評価・検討していただければと思います。

運用コストが気になる… => 技術的には Nomad クライアント上にミラーを立ち上げる “裏技” があります。

公式ドキュメントでは、ミラーの動作が CircleCI の動作に影響を与える可能性も考慮し、ミラーを別マシン上で立ち上げることをお願いしていますが、
技術的には CircleCI が動作しているマシンの上 (特に Nomad クライアント上) にミラーをセットアップすることが可能です。

少し難易度・複雑度の高い設定になるため、こちらでの手順の紹介は差し控えますが、
ミラーが動いているマシンの運用コストが問題になっている、ということであれば、ぜひサポート デスク経由でお知らせいただければと思います。

1 Like