開発中に何度もDocker Hubからpullを実行しているとpull制限に引っかかってしまいます→ダウンロード率制限
これを回避するためGitlab.comではDependency Proxyが用意されています。pull先をDependency ProxyにすることでDocker Hubから落としたイメージがDependency Proxy上にキャッシュされ以後、Dependency Proxy上のキャッシュを参照することになるので、Docker Hubのpull制限にほぼ引っかからなくなります。
使い方
通常の場合
DockerHubのalpine:latestを使いたい場合は以下のようになります。login先がregistry.gitlab.com
ではなくgitlab.com
なことに注意してください。
$ docker login gitlab.com
$ docker pull gitlab.com/<グループ名>/dependency_proxy/containers/alpine:latest
Gitlab CIのパイプライン内で使う場合
.gitlab-ci.yamlを以下のように書けば使用できます。
stages:
- build
image: docker
services:
- docker:dind
build:
stage: build
tags:
- docker
script:
- docker login -u ${CI_DEPENDENCY_PROXY_USER} -p ${CI_DEPENDENCY_PROXY_PASSWORD} ${CI_DEPENDENCY_PROXY_SERVER}
- docker pull ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/alpine:latest
Gitlab CI内でデフォルトで用意されているCI_DEPENDENCY_PROXY
関連の環境変数を使用してloginとpullをしています。
Dependency Proxyのキャッシュの自動削除
グループの Settings > packages_and_registriesにDependency Proxyに関する設定があります。ここにClear the Dependency Proxy cache automatically
という設定があるのでオンにしておいたほうが良いかもしれません(デフォルトはオフ)。オンにすると90日ごとにキャッシュをクリアしてくれるようで、同じイメージでも脆弱性対応等でDockerHub側で更新されていることがあったり、latestのものを使っている場合などは勝手に更新されなくなるので必要に応じてここの設定を変更する必要があります。