VTRyo Blog

一歩ずつ前に進むブログ

CircleCIで使用中のDocker HubコンテナイメージPull制限に対応する

2020年11月1日から、Docker Hubは匿名からのPullに対しては回数制限するという話に。

www.docker.com

この話で、CircleCI側もドキュメントを用意してくれている。

2020年11月1日から、Docker Hub で匿名ユーザーに対する発信元 IP に基づいたプル回数制限が導入されます。運用中のサービスでの混乱を避けるために、Docker Hub から認証付きでプル操作を行うようにすることをお勧めします。認証は設定ファイルで行えます(Docker の認証付きプルの使用を参照)。

circleci.com

circleci.com

CircleCI内でDocker HubからPullしているコンテナがいくつかあるので、対応する。

Docker HubアカウントでPullする

匿名に対しての制限なので、たとえDocker HubアカウントがFreeプランだったとしても認証を通せば200Pull/6時間になる(匿名は100Pull)。

※当たり前だけど課金すれば無制限にできる。

www.docker.com

課金してあげたいところだが、一旦はFreeプランのアカウントとしてPullするように変更する。

なお一連の流れはCircleCIのDISCUSSにも記載されている。

discuss.circleci.com

Dockerを使用している箇所にauth設定を入れる

例えばこのような設定があったとする。

circleci.com

executors:
  defaults:
    docker:
      - image: redis:4.0
      - image: mongo:3.6.17

ここにauthの設定を組み込む。

circleci.com

docker_hub_auth: &docker_hub_auth
  auth:
    username: $DOCKERHUB_USER
    password: $DOCKERHUB_PASSWORD
    
executors:
  defaults:
    docker:
      - image: redis:4.0
        <<: *docker_hub_auth
      - image: mongo:3.6.17
        <<: *docker_hub_auth

$DOCKERHUB_USER$DOCKERHUB_PASSWORDは環境変数としてCircleCIのProject settings - Environment Variablesに登録した。

実行→Jobが正常終了すればOK

まずローカルでconfig.ymlのSyntaxを確認しつつ……。

$ circleci config validate -c .circleci/config.yml
Config file at .circleci/config.yml is valid.

問題ないのでPushしてテストが通るか確認した。

認証ができているのか確認できない?

CircleCIにてアプリケーションテストのJobを実行(Pullするコンテナイメージはテストで使っていたため)したところ、
テストは無事合格したが、肝心の認証がされてPullしてきたのかわからない。

カスタマーサポートに問い合わせたところ*1「ビルドが完了すれば認証ができていると考えて良いです」と回答をいただいた。

今後開発が進んで、ログで見れるようになるということなのでそこは楽しみに待っていよう。

ということで認証設定を追加して問題なく動いたら、Pull制限対応は完了なり。

参考

qiita.com

*1:10秒くらいで担当者アサインされた