docker で透過的なプロキシを設定する方法を調べていたが、どうにもよくわからんな
/etc/docker/daemon.json で registry-mirrors を設定するらしいというところまではわかるのだが、これを複数のレジストリに対して透過的な pull through キャッシュプロキシを設定するのに使えるかがわからん
たとえばひとつの “レジストリミラー” から ghcr.io, quay.io, hub.docker.com の3つのレジストリへの pull をキャッシュしてやれると嬉しいわけだが、そういうことはできるようになっているのだろうか?
buildkit だか何だかはレジストリごとに設定できるようなのだが、 Docker 本体にそういう記述がないのでよくわからない。プロキシ側の工夫でどうにかできるのなら良いのだが。
How to use multiple Docker registry mirrors
https://blog.alexellis.io/how-to-configure-multiple-docker-registry-mirrors/
> dockerd itself, can have two mirrors defined, but in my experience it was unable to pull from the mirror for ghcr.io.
だめそう……
Registry as a pull through cache | Docker Docs
https://docs.docker.com/docker-hub/mirror/#gotcha
> It's currently not possible to mirror another private registry. Only the central Hub can be mirrored.
これか?
結論としては、 registry-mirrors 設定は "central Hub" (つまり Docker Hub) にしか対応しておらず、ミラーレジストリ側が対応していようが dockerd からそれを透過的に使わせることはできない、と。
となると、次に考えられる手は /etc/hosts で諸々のレジストリの名前がキャッシュプロキシを指すようにして……みたいな方向なんだが、さすがに嫌だな (CI 環境をそんなに激しく弄りたくない)
そもそも Woodpecker agent が勝手に起動する docker container に対してそういうことが簡単にできるかすら若干怪しい (できたとしてやりたくない可能性が高い)
コンテナレジストリの可用性を高める取り組み - Cybozu Inside Out | サイボウズエンジニアのブログ
https://blog.cybozu.io/entry/2021/01/26/090000
> Dockerコンテナランタイムではdocker.ioしかミラーリングをおこなうことができません。 何年も前から議論されてはいるのですが、実装は進んでいないようです。
Master issue: private registry caching · Issue #1431 · distribution/distribution
https://github.com/distribution/distribution/issues/1431
だーめだこりゃ
How to configure a Docker Hub proxy with Harbor? | Smile
https://smile.eu/en/publications-and-events/how-configure-docker-hub-proxy-harbor
Podman を使えば "prefix/location feature" でマッピングできるらしい。 Woodpecker 側ではこいつを使ってみるか……
Podman は移行しようとしてみたこともありつつ、結局 docker compose 系のエコシステムを捨てて k8s ライクなものを使ってくださいということになっていたのに適合できなくて諦めてしまったことがある
Woodpecker CI の agent に podman 経由で Harbor のキャッシュプロキシを使わせることに成功した。これでコンテナや agent を破壊しまくったり毎日 podman system prune で GC しても大丈夫