レジストリミラーにmirror.gcr.ioを設定してDocker Hubのレートリミットに備える
はじめに
記事執筆時の2025年3月現在、Docker Hubのpull レートが2025年4月から変更されることが予告されています。
未認証のユーザーはIPアドレス毎に1時間あたり10回の制限となり、レートリミットに達しやすくなることが予想されます。
有償プランであればレートリミットはありませんが、別途レートリミットの制限を回避しやすくするためのレジストリミラーとしてmirror.gcr.io
を設定します。
1行まとめ
Docker DesktopのクライアントアプリケーションにあるDocker Engineの設定、もしくは${HOME}/.docker/daemon.json
(macOS) or /etc/docker/daemon.json
(Linux)に以下の内容を追記します。
{
"registry-mirrors": [
"https://mirror.gcr.io"
]
}
Docker Hubのレジストリミラーを設定する
Docker Hubはレジストリミラーを設定できます。
dockerdを起動する際に--registry-mirror
のオプションを渡すか、daemon.json
に設定を追加します。
Docker Desktopを利用している場合は、Docker DesktopのクライアントアプリケーションにあるDocker Engineの設定から同様の設定が可能です。
{
"registry-mirrors": []
}
daemon.json
の場所はOSによって異なります。
以下の場所に置かれていることが多いです。
- macOS:
${HOME}/.docker/daemon.json
- Linux:
/etc/docker/daemon.json
公開されているレジストリミラー
Google Cloudがレジストリのミラーを公開しています。[1]
Artifact Registry caches frequently-accessed public Docker Hub images on mirror.gcr.io.
記載がある通りキャッシュしているイメージは一部に限られます。
キャッシュ対象のイメージは公開されていませんが、docker pull mirror.gcr.io/{IMAGE_NAME}
のようにpullすることで確認できます。
先ほどのregistory-mirrorの設定にhttps://mirror.gcr.io
を追加してdocker pullを実行したら、mirror.gcr.io
にイメージを探しに行きます。存在すればそのままpull、無ければDocker Hubからpullする挙動になります。
{
"registry-mirrors": [
"https://mirror.gcr.io"
]
}
$ docker system info
Client: Docker Engine - Community
Version: 28.0.1
Context: default
#中略
Registry Mirrors:
https://mirror.gcr.io/
その他
- Dockerfileの修正が必要になりますが、AWSをメインのクラウドとして利用しているのであればECR PublicをAWS IAMユーザーで認証して利用する方法もおすすめです
- パブリックなレジストリミラーは他にもありますが、Google Cloud以外に制限ない信頼できるミラーは調べた範囲では見つかりませんでした
- レジストリの運用が問題にならないのであれば、キャッシュのためのPrivate Registryを立てるのも一案です
-
関係者曰く制限がないそうです。今後はわかりません https://knqyf263.hatenablog.com/entry/2025/02/28/210820 ↩︎
Discussion