Ateam Lifestyle Advent Calendar 2020の3日目は 株式会社エイチームライフスタイルの @dabits が担当します。
2020年11月よりDockerhubの規約が変更になり、その兼ね合いでDockerhubからのpull回数に時間あたりの制限が加わることとなりました。
dockerが浸透した弊社においても一部その影響を受ける箇所があり、調査/対応を行いましたのでご紹介します。
2020年11月からのpull制限内容
2020年11月からのDockerhubにおけるpull可能回数は以下の通りの区分に変更されました。
- 非ログインユーザ : 100回/6時間 (IP毎)
- ログイン済無償ユーザ : 200回/6時間
- pro/teamプランユーザ : 無制限
同一IPにおいて非ログインユーザとログイン済みユーザが混在する場合、それぞれのpull回数は個別にカウントされるため、
例えば非ログインユーザとログイン済み無償ユーザがそれぞれ1名ずつ同一IPで利用している場合、合算300回/6時間まで利用できることになります。
なおこの上限を超えてpullを行った場合、Dockerhubのサーバからは429 Too Many Requests
のレスポンスが帰ってきて、当面の時間pullが実施できなくなります。
現在の制限値確認方法
以下の手順でシェル上でコマンドを実行することで、現在のIPもしくはアカウントにおける制限値を確認することができます。
なお、手順2を実行した時点でpull 1回を行ったのと同等のカウントがなされるためお気をつけください。
1.匿名or非匿名でのtokenを取得する
- 匿名の場合
$ TOKEN=$(curl "https://auth.docker.io/token?
service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
- アカウントをお持ちの場合
$ TOKEN=$(curl --user 'username:password' "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
2.現在の制限値を取得する
$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep RateLimit
制限緩和方法
大きく分けて3つほど対応方法があります。
a. サービス提供各社が提供する方法に従う
サービス提供各社が独自の対応をとっている場合があり、その方針に従うケースです。
以下の主要なクラウドサービスでは、それぞれ対応方法を案内しています。
- クラウドサービス
- CI/CDサービス
- Github Actions : 非公式情報では問題なし
- Circle CI : 当座は問題なし
- Gitlab CI : Saasは原則ミラー、SelfHostedはミラー経由を推奨
b. ミラーサーバを構築し、それをハブにして利用する
- Gitlab CIのBlog記事記載に通り、ミラーサーバを構築してそれをハブにすることである程度制限を緩和することができます。
c. Dockerhub pro/team planに加入して制限を撤廃する
- Dockerhubからの公式発表通り、有償プランに加入することでpull制限を撤廃することができます
対応事例/最後に
弊社では上記緩和方法のうち、cを適用して自社内CI/CDサーバに有償アカウントのtokenを割り当てることで制限の緩和を実施しております。
Dockerhubに限らず、サービス提供各社ともに対応方針が流動的に動いているため、今後も対応方法が流動的に変化する可能性があります。
業界動向を見守りながら引き続きコンテナ技術の浸透に従事する予定です。
なお、本記事は私が調べた範囲の情報のみになりますので誤情報が含まれるかもしれません。その際はぜひ編集リクエストをいただけるとありがたいです。