対象読者
- EKS や GKE など、コンテナを利用するマネージドサービスを使って、サービスの開発または運用をされている方
- private レジストリではなく、Docker Hub から直接 pull して運用している image に心当たりのある方
要約
- 2020年の11月1日から、Free user に関して、Docker Hub からの image pull 回数に制限がかかるようになる。
- 特に Free user のうち、ログインしていない Anonymous user の回数制限は
100 pulls / 6 hours
となっている。 - コンテナを利用するマネージドサービスを利用している場合、ホストが Anonymous user として docker pull を行ってしまうため、pull 回数制限に引っかかる可能性がある。
- pull 回数制限に引っかかってしまうと image の pull ができず大障害に発展する可能性がある。
- 対応としては、Docker Hub から pull してきている image を private なレジストリに移行するのがよさそう。
対応方法の整理とその調査
対応方法としては以下の3つが考えられる。1 が一番楽で、3 が一番面倒。
- 何らかの方法でマネージドサービスの各ホストで
docker login
する - GitHub Container Registry を使う
- Docker Hub から pull してきている image を private なレジストリに移行する
1. 何らかの方法でマネージドサービスの各ホストでdocker login
する
これができたら一番楽だが結論から言うと不可能っぽい。
そもそもコンテナ周りのマネージドサービスは private レジストリを利用することを前提としているようで、「EKS (or GKE) docker login」などでググっても特に情報が出てこなかった。
2. GitHub Container Registry を使う
GitHub が public かつ無料のコンテナレジストリを公開するそう。詳しくは下記の記事を参照のこと。
こちらの記事にもあるとおり、現時点で無料範囲での利用において何らかの制限があるなどの説明は今のところ見当たらない。
ゆえに login 不要で無制限に image を pull できる第2の Docker Hub として利用できる可能性がある。
一方で、GitHub Container Registry は現段階ではまだパブリックベータであり、2020年11月1日までにサポートがどこまで進むか不明瞭である。
よって、少なくとも現時点 (2020-09-30) ではこの方法は取りづらい。
3. Docker Hub から pull してきている image を private なレジストリに移行する
一番堅実な方法。手順としては下記になるか。
- サービスで利用しているコンテナイメージを全て洗い出して、Docker Hub から直接 pull してきていないか精査する。
- Docker Hub から直接 pull している image を private レジストリに push する。
- pull の向き先を Docker Hub から private レジストリに変える。
最後に
この話、サービスによっては結構深刻な問題になりうると思っているのですが、調べてもあまり情報が得られません。
もし知見をお持ちの方がいらっしゃいましたらコメントいただけると非常にありがたいです。