ECR Public をDockerHubの代わりに使ってみた(DockerHubのDownload Rate Limit対策)


あらまし

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環境を使っている場合は、特に制限も無いので特に有用だと思われます。