how-to-install-and-manage Help

Docker Registry

Nous avons mis en place deux éléments essentiels pour la gestion de nos conteneurs :

  • Un Docker Registry privé (maison),

  • Un miroir (cache) Docker des dépôts publics,

Ces deux services sont hébergés sur notre infrastructure afin de répondre à des besoins de performance, de sécurité et de maîtrise des dépendances lors de nos déploiements.

Docker Registry privé

Un Docker Registry est un service qui permet de stocker et distribuer des images Docker. Plutôt que de nous appuyer sur des registres publics comme Docker Hub ou GitHub Container Registry, nous avons choisi de mettre en place un registre privé au sein de notre infrastructure. Celui-ci nous permet d’héberger nos propres images personnalisées, développées spécifiquement pour les besoins de notre projet.

Grâce à cette solution interne, nous centralisons le stockage de nos conteneurs dans un environnement sécurisé et totalement contrôlé. Cela facilite également l’intégration continue avec nos pipelines CI/CD, notamment ceux mis en place avec GitLab, en assurant une communication rapide et directe avec notre registry.

Un autre avantage important est que ce registre nous permet de contourner les limitations imposées par Docker Hub, notamment la restriction du nombre de téléchargements pour les utilisateurs non authentifiés. Cela évite toute interruption ou ralentissement lors de déploiements fréquents ou en cas de scaling automatique dans notre cluster Kubernetes.

Enfin, le fait de disposer d’un registre local assure la disponibilité des images même en cas de coupure d’Internet, ce qui améliore significativement la fiabilité et l’autonomie de notre infrastructure.

Miroir Docker

En complément, nous avons également mis en place un miroir des registres publics Docker. Ce miroir agit comme un proxy cache, permettant d'accélérer les temps de téléchargement en évitant les accès directs aux registres publics, ainsi que réduire la charge réseau extérieure en réutilisant des images déjà téléchargées.

Le miroir est particulièrement utile pour les images de base utilisées dans nos déploiements.

Installation

Comme pour le gitlab les deux registres seront mis sur le VPS Opal via docker compose :

docker-registry: image: 'registry:2' restart: unless-stopped ports: - '5000:5000' volumes: - '/var/lib/registry:/var/lib/registry' - './auth:/auth' environment: - 'REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry' - 'REGISTRY_HTTP_ADDR=0.0.0.0:5000' - 'REGISTRY_AUTH=htpasswd' - 'REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm' - 'REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd' networks: - public mirror-docker-registry: image: 'registry:2' restart: unless-stopped ports: - '5001:5000' volumes: - '/var/lib/mirror-registry:/var/lib/registry' - './auth:/auth' environment: - 'REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry' - 'REGISTRY_HTTP_ADDR=0.0.0.0:5000' - 'REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io' - 'REGISTRY_AUTH=htpasswd' - 'REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm' - 'REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd' networks: - public

Nous devons aussi ajouter un nouveau fichier pour l'authentification du docker registry :

auth: htpasswd: realm: basic-realm path: /etc/docker-registry/htpasswd

Nous devons ensuite créer les registres DNS sur cloudflare :

enregistrement_DNS_docker_registry.png

Dans le fichier Caddyfile, nous allons ajouter les deux urls que nous avons préalablement enregistré :

registry.innovalia.cc:443 { reverse_proxy http://docker-registry:5000 tls { dns cloudflare {env.CF_API_TOKEN} } } mirror-registry.innovalia.cc:443 { reverse_proxy http://mirror-docker-registry:5000 tls { dns cloudflare {env.CF_API_TOKEN} } }
Last modified: 30 June 2025