docker registry pull through cache with basic auth

01/06/2023

on a un serveur qui servira de proxy. et un 2e serveur qui va s'y connecter pour appeller le dockerhub.

régler le daemon sur la 2e machine

PS: si le mirroir souhaite etre protégé par basic auth ça ne marchera pas.

mettre ça dans /etc/docker/daemon.json

"registry-mirrors": [
    "https://registrymirror.raphaelpiccolo.com"
]

systemctl restart docker

docker info doit l'afficher

créer le mirroir

sur le 1er serveur on tape ça pour avoir le fichier de config

docker run --rm registry:2 cat /etc/docker/registry/config.yml

on y ajoute ça :

proxy:
    remoteurl: https://registry-1.docker.io

mettre ce compose :

registrymirror:
    restart: always
    container_name: registrymirror
    image: registry:2
    volumes:
        - ./registrymirror/config.yml:/etc/docker/registry/config.yml
    labels:
        - traefik.enable=true
        - traefik.http.routers.registrymirror.rule=Host(`registrymirror.${DOMAIN}`)
        - traefik.http.services.registrymirror.loadbalancer.server.port=5000
        - traefik.http.routers.registrymirror.tls.certresolver=wildcardle
        - traefik.http.routers.registrymirror.entrypoints=websecure
        - traefik.http.routers.registrymirror.middlewares=compressor,securityheaders

booter le service & vérifier que tout va bien

docker compose up -d
docker logs -f registrymirror

check que tout marche

curl https://admin:xxx@registrymirror.raphaelpiccolo.com/v2/_catalog

on voit qu'il n'y a rien

Puis on tente de pull depuis l'autre serveur

docker pull ubuntu
# pull manuel
docker pull registrymirror.raphaelpiccolo.com/library/ubuntu

si on relance le curl on voit ubuntu

et on voit le crédit est consomé au niveau du proxy

TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" 2>/dev/null | jq -r .token) ; curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep -i RateLimit

debugage :

journalctl -u docker.service --since "10 min ago" -x -f