blog.monophile.net

コンピュータに関するメモ。

著者

山本一彰(Takaaki Yamamoto)

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 2015年にコンビネータ論理を基に計算完備な計算手法 "論理珠算"を開発し、 それを含む体系である"算道"を構成した。 その成果により、2016年に 第19回 文化庁メディア芸術祭 アート部門 新人賞 (文部科学大臣賞) を受賞。 現在はSRE(サイト信頼性エンジニア)として生計をたててている。

投稿

Docker Hub のレート制限を受けないように mirror.gcr.io を使う

概要

Docker Hub のレート制限 が2020/11/01から施行されるようになったらしい。

  • Free plan – anonymous users: 100 pulls per 6 hours
  • Free plan – authenticated users: 200 pulls per 6 hours
  • Pro plan – unlimited
  • Team plan – unlimited

レート制限はダウンロードする側のパブリックIPアドレスベースでかかるようなので、 同一のIPを使いまわしているオフィスなどでは致命的な状況になることが想像できる。 その制限を回避する方法の一つを紹介する。

回避方法

下記のような対応方法が考えられる。

  • Docker Hub の有料プランを契約し、各サーバもしくは手元の開発環境で認証情報を利用してダウンロードする。
  • 自前でコンテナイメージレジストリをホスティングし、そこを参照するように構成する。
  • ダウンロード元のパブリックIPを分散するために、プロキシを自前で構成する。
  • ミラーレポジトリ mirror.gcr.io を利用する。

それぞれにメリットとデメリットが存在するが、今回は追加の金銭的コストが発生しない 「ミラーレポジトリ mirror.gcr.io を利用する」 方法を紹介する。

この方法には他にもメリットがあり、 既存のアプリケーション周辺の設定(Dockerfile, CI/CD設定) を変更することなく、 Dockerを実行する環境(サーバ, 手元の開発環境)の設定だけを変えれば対応できるため、 比較的簡単に導入できると思っている。

ミラーリポジトリ mirror.gcr.io を利用するための設定

Linux(Ubuntu) の場合

/etc/docker/daemon.json に mirror.gcr.io を使うような設定を行い、 docker デーモンを再起動すればよい。

/etc/docker/daemon.json

上記のファイルを編集した上で、docker デーモンを再起動する。

Docker for Mac の場合

macOS の場合も基本的には上述の Linux(Ubuntu) と同じ。 macOS の画面の上部のツールバーに表示されている Docker のアイコンをクリックし、 PreferenceDocker Engine と辿り、 下図のように "registry-mirrors": ["https://mirror.gcr.io"] を追加し、 Apply & Restart を行えば良い。

Docker for Mac設定画面
Docker for Mac設定画面

確認方法

実際に mirror.gcr.io 経由でダウンロードが行われているかどうかは ↑のコマンドを打った状態で、別のターミナルで↓を打つ。

このとき、パケットが表示されれば mirror.gcr.io を利用していることを示している。

参考