🐳

CodeBuild で docker pull した際の制限に対する対策

2023/12/23に公開

CodeBuild で docker pull の制限とは

docker image の pull 回数には制限があります。
公式ドキュメントによると、Docker アカウントを持っていない場合 100回/6時間 でアカウントがあるとその倍で 200回/6時間 しかできません。
https://www.docker.com/increase-rate-limits/

普通に開発していたら制限を意識することはありますが、CodeBuild ではそうは行きません。
この制限は IP アドレス単位でカウントされるらしいのですが、CodeBuild の場合立ち上がるインスタンスが IP アドレスを共有するため制限に結構な割合でヒットします。

制限に対する詳細は以下の記事で細かい説明があるのでぜひ。

Docker Hub の Rate Limitに引っかかったのでdocker loginで対策した
https://fu3ak1.hatenablog.com/entry/2020/11/22/122241

対策

上記記事では対策として 3 つ上げられています。

  • ECR にイメージをコピーしておく
  • CodeBuild を VPC 内で実行させ Elastic IP など固定 IP アドレス経由でアクセスする
  • Docker Hub ユーザーを作成してログイン処理を行う

複数人で開発する際に Docker Hub アカウントを作って運用するのも面倒なので今回は ECR へ予め push しておきます。

方法

以下の手順で行いました。
今回は python:3.9-buster を例にします。
また予め ECR に python というリポジトリを作ったことを前提とします。

docker pull python:3.9-buster
docker images # このとき python:3.9-buster の image id を控える
docker tag {image id} xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/python:3.9-buster
docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/python:3.9-buster

これで push は完了しました。
後は Dockerfile の FROMxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/python:3.9-buster を指定します。
これによって Docker Hub から pull しないため制限にヒットすることはありません。

Discussion