DEV Community

Discussion on: Économiser du temps et de la bande passante avec un cache Docker local

Collapse
 
zedtux profile image
ZedTuX

Super article, merci 👍.

Cependant cette technique ne fonctionne qu'avec les images du registre publique de Docker (ce qui est déjà super), mais pas avec les registres privés, comme celui de Kubernetes par exemple.

Si je fais docker pull k8s.gcr.io/pause:3.1, l'image est téléchargée, mais pas de copie dans le registre local.

Aurais-tu une astuce pour gérer aussi ce cas?

P.S: J'ai trouvé une image Docker qui inclus un serveur Nginx et qui sert de proxy pour les URLs données (k8s.gcr.io y ai ajouté pour l'exemple), ce qui permet au registre local de fonctionner aussi pour les images de registres privés, mais cette astuce ne fonctionnera pas pour ce que je veux faire 😕.

Collapse
 
mayeu profile image
Mayeu

Salut 👋

Merci pour le compliment, je suis heureux que ça t'ait été utile !

Alors, je n'utilise pas de registry privé du tout (en tout cas pour l'instant), donc je ne suis pas 100% sûr que ce que je vais dire ensuite marche.

D'abord, chaque registre local ne peut servir de cache qu'à un seul autre registre. Du coup il faudra faire tourner un autre container avec une nouvelle configuration dedans.

Le proxy support l'utilisation d'un username + password (voir la doc:

proxy:
  remoteurl: https://registry-1.docker.io
  username: [username]
  password: [password]

Attention à ça, car il y a un risque en stockant un mot de passe dans un fichier. Idéalement il faudrait créer un compte dédié avec des droits limités.

Finalement, il est possible de passer plusieurs caches à docker:

{
    "registry-mirrors": ["http://localhost:5000", "http://cache-2"]
}

Donc peut-être qu'en configurant un cache par registry, et en les ajoutant tous au miroir ça marchera ?

Collapse
 
zedtux profile image
ZedTuX

Merci pour ton commentaire.

En fait, je voudrais cacher le téléchargement des images de Kubernetes, mais malheureusement, quand Docker voit une image qui a un nom de domaine devant (k8s.gcr.io dans ce cas si), il concidère que c'est un registre privé et donc ne passe plus par le(s) registre(s) spécifiés dans registry-mirrors.

J'ai trouvé cette image Docker qui permet de palier à ce problème en fournissant un proxy (squid) et un registre Docker: hub.docker.com/r/rpardini/docker-r....

Je n'ai pas encore réussi à la faire fonctionner correctement (j'ai un ticket en cours) mais l'image est prometteuse.