DockerHubのレートリミット1は、CI/CD環境で頻繁にDockerイメージを取得する必要がある場合、予期しない問題を引き起こすことがあります。イメージのビルドが失敗したり、これにより開発プロセスに遅れが生じるのは避けたいところです。
Step 1/2 : FROM php:7.4.0-apache
7.4.0-apache: Pulling from library/php
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
そして、ここに至って課題は二つに分かれます。一つはセキュリティ上のリスク、もう一つは管理コストです。DockerHubへの認証情報をbuildspec.ymlに記述することは、セキュリティ上好ましくありません。また、使用するイメージをECRに保存管理することは、管理コストが増えてしまいます。
これらの課題を解決するために、二つの方法を提案します。
NAT Gatewayを使用して固有のIPを付与する
まず一つ目は、NAT Gateway2を使用して固有のIPを付与することです。これにより、DockerHubからのpullリクエストが特定のIPから来るようになり、レートリミットの制約を回避できます。ただし、この方法には追加の費用が発生しますので、予算管理に注意が必要です。
ECR Publicを経由してDockerHubのイメージを取得する
二つ目の方法は、AWSが提供する新しいサービス、ECR Public3を経由してDockerHubのイメージを取得することです。具体的には、DockerHubのイメージをpublic.ecr.aws/docker/library/以下にミラーリングします。例えば、php:7.4.0-apacheのイメージはpublic.ecr.aws/docker/library/php:7.4.0-apacheとして取得できます。これにより、DockerHubへの直接のリクエストを避けることができます。
おわりに
DockerHubのレートリミットは開発の流れを妨げる可能性がありますが、上記の方法を使用することで、この問題を効率的に解決することができます。適切な手法を選択することで、安全性と効率性を確保しながら開発プロセスをスムーズに進めることが可能です。これらの提案が、あなたの開発作業をよりスムーズに、そして安全に進めるための一助となれば幸いです。