あらまし
CodeBuildでDockerのビルド中にDockerHubにひっかかりました。AWSの新サービスECR Publicを使って簡単に回避できました。
事象
CodeBuildでubuntu
をbaseイメージとしたDockerコンテナをビルドしようとしたところ、以下のエラーが発生しました。
error pulling image configuration: toomanyrequests: Too Many Requests. Please see https://docs.docker.com/docker-hub/download-rate-limit/
調査
DockerHubが最近ダウンロード数に制限をかける事になった。ダウンロード数はグローバルIP/アカウント(ログインすれば)ごとに制限がかかるとの事。
クラスメソッドさんの記事が詳しい。
“Too Many Requests.” でビルドが失敗する…。AWS CodeBuild で IP ガチャを回避するために Docker Hub ログインしよう!という話
対応
(DockerHubの認証めんどくさいな、、、、と思ってたところ)ちょうど、AWSがDockerHubの代替となるサービス ECR Public
を提供し始めたので、こちらを利用する事にしました。
[速報]AWS、Docker Hubの代替を狙う「Amazon Elastic Container Registry Public」提供開始。AWS re:Invent 2020
AWSがDocker Hubの代替サービスを発表予告。パブリックにコンテナイメージを公開可能で50GBまで無料、AWSからなら何度でもプルし放題に
DockerHubに認証を入れるパターンと比較して、
- 簡単
- 無料枠の幅が大きい
- AWSサービスで使うならRateLimit気にしなくて良い
というメリットがあると判断しました。
ECR Publicにアクセスすると、主要な公式イメージは登録されてる模様です。(全て確認したわけではないです)
ImageURIがあるので(tagの構成はDockerHubと同じ)、DockerFileのfromを書き換えるだけです。
FROM public.ecr.aws/ubuntu/ubuntu:bionic
どうやらDockerHubと全く同じものがhostingされているらしく(同じhashでしたし、Dockerのcacheも効きました)、単純に書き換えるだけですんなり動きました。
nginxのDocker用リポジトリを見たら、自動でECRPublicにpushするようなスクリプトがありました。
まとめ
少し使ってみただけですが、公式イメージの取得元として、DockerHubの代替としてECR Publicは使えそうです。
特にAWS環境を使っている場合は、特に制限も無いので特に有用だと思われます。