Docker Hubのレート制限を受けないように mirror.gcr.io を使う
概要
Docker Hub のレート制限 が2020/11/01から施行されるようになったらしい。
- Free plan – anonymous users: 100 pulls per 6 hours
- Free plan – authenticated users: 200 pulls per 6 hours
- Pro plan – unlimited
- Team plan – unlimited
レート制限はダウンロードする側のパブリックIPアドレスベースでかかるようなので、 同一のIPを使いまわしているオフィスなどでは致命的な状況になることが想像できる。 その制限を回避する方法の一つを紹介する。
回避方法
下記のような対応方法が考えられる。
- Docker Hubの有料プランを契約し、各サーバもしくは手元の開発環境で認証情報を利用してダウンロードする。
- 自前でコンテナイメージレジストリをホスティングし、そこを参照するように構成する。
- ダウンロード元のパブリックIPを分散するために、プロキシを自前で構成する。
- ミラーレポジトリ mirror.gcr.io を利用する。
それぞれにメリットとデメリットが存在するが、今回は追加の金銭的コストが発生しない 「ミラーレポジトリ mirror.gcr.io を利用する」 方法を紹介する。
この方法には他にもメリットがあり、 既存のアプリケーション周辺の設定(Dockerfile, CI/CD設定) を変更することなく、 Dockerを実行する環境(サーバ, 手元の開発環境)の設定だけを変えれば対応できるため、 比較的簡単に導入できると思っている。
ミラーリポジトリ mirror.gcr.io を利用するための設定
Linux(Ubuntu) の場合
/etc/docker/daemon.json に mirror.gcr.io を使うような設定を行い、 docker デーモンを再起動すればよい。
/etc/docker/daemon.json
上記のファイルを編集した上で、docker デーモンを再起動する。
Docker for Mac の場合
macOSの場合も基本的には上述のLinux(Ubuntu)と同じ。 macの画面の上部のツールバーに表示されているDocker(クジラ)のアイコンをクリックし、 Preference
→ Docker Engine
と辿り、 下図のように "registry-mirrors": ["https://mirror.gcr.io"]
を追加し、 Apply & Restart
を行えば良い。

確認方法
実際に mirror.gcr.io 経由でダウンロードが行われているかどうかは ↑のコマンドを打った状態で、別のターミナルで↓を打つ。
このとき、パケットが表示されれば mirror.gcr.io を利用していることを示している。