La mise en place d’un miroir Docker privé avec Nexus Repository permet d’améliorer la sécurité, la fiabilité et les performances de vos builds Docker en entreprise. Cet article explique étape par étape comment déployer et configurer Nexus en tant que proxy Docker Registry fonctionnel sur Kubernetes.
Table of Contents
🟢 Pourquoi créer un miroir Docker privé avec Nexus ?
Docker Hub limite les requêtes anonymes et impose des restrictions sur le trafic entrant. Avoir un proxy local Docker Hub via Nexus permet de :
- Réduire la consommation de bande passante vers Docker Hub.
- Accélérer les téléchargements d’images Docker grâce au cache local.
- Augmenter la fiabilité en cas d’indisponibilité temporaire de Docker Hub.
- Simplifier la gestion des images Docker dans un environnement sécurisé.
🚀 Prérequis
- Un cluster Kubernetes opérationnel.
- Une instance Nexus OSS (Open Source) installée sur Kubernetes.
- Ingress Controller configuré (par exemple, Nginx Ingress).
cert-manager
pour la gestion automatique des certificats SSL.
🛠️ Étape 1 : Déployer Nexus sur Kubernetes
Créez d’abord un déploiement Nexus stable et persistant avec ce manifeste YAML minimaliste :
apiVersion: apps/v1
kind: Deployment
metadata:
name: nexus
namespace: devtools
spec:
selector:
matchLabels:
app: nexus
template:
metadata:
labels:
app: nexus
spec:
containers:
- name: nexus
image: sonatype/nexus3:latest
resources:
requests:
memory: 3Gi
cpu: 500m
volumeMounts:
- mountPath: /nexus-data
name: nexus-data
volumes:
- name: nexus-data
persistentVolumeClaim:
claimName: nexus-data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nexus-data
namespace: devtools
spec:
accessModes:
- ReadWriteMany
storageClassName: managed-nfs-storage
resources:
requests:
storage: 20Gi
📡 Étape 2 : Créer les Services Kubernetes nécessaires
Créez deux Services distincts, un pour l’interface web Nexus classique (port 8081) et un autre pour Docker Registry (port 5000) :
apiVersion: v1
kind: Service
metadata:
name: nexus-web
namespace: devtools
spec:
ports:
- port: 8081
targetPort: 8081
selector:
app: nexus
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: nexus-docker
namespace: devtools
spec:
ports:
- port: 5000
targetPort: 5000
selector:
app: nexus
type: ClusterIP
🌐 Étape 3 : Configurer l’Ingress avec deux domaines distincts
Docker Registry impose un domaine dédié. Utilisez un domaine distinct pour Nexus Web et Docker Registry :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nexus-ingress
namespace: devtools
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 1024m
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- nexus.example.com
- docker-hub.example.com
secretName: nexus-tls
rules:
- host: nexus.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nexus-web
port:
number: 8081
- host: docker-hub.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nexus-docker
port:
number: 5000
Remplacez nexus.example.com
et docker-hub.example.com
par vos domaines.
⚙️ Étape 4 : Configurer Nexus comme proxy Docker Hub
Connectez-vous à l’interface Web de Nexus (https://nexus.example.com
) :
- Allez dans :
Administration → Repositories → Create Repository → Docker (proxy). - Configurez les champs suivants :
- Name :
docker-hub-proxy
- Remote Storage :
https://registry-1.docker.io
- HTTP Connector : port
5000
activé - Allow anonymous docker pull : activé pour faciliter l’usage
- URL externe :
https://docker-hub.example.com
- Name :
Sauvegardez cette configuration.
🐳 Étape 5 : Configurer les clients Docker pour utiliser Nexus
Vous avez deux possibilités :
Option 1 : Configuration globale via daemon.json
Éditez /etc/docker/daemon.json
sur vos clients Docker :
{
"registry-mirrors": ["https://docker-hub.example.com"]
}
Puis relancez Docker :
sudo systemctl restart docker
Désormais, toute requête vers Docker Hub utilisera votre miroir Nexus.
Option 2 : Utiliser explicitement votre miroir Nexus
Sans configuration globale :
docker pull docker-hub.example.com/library/nginx
🚦 Étape 6 : Test et vérification
Effectuez un test simple :
docker pull docker-hub.example.com/library/hello-world
Votre image Docker devrait être téléchargée via Nexus. Vérifiez dans l’interface Nexus (docker-hub-proxy
) que l’image apparaît bien en cache.
📌 Bonnes pratiques et recommandations supplémentaires
- Activez les certificats SSL avec Let’s Encrypt (cf. annotations
cert-manager
dans l’Ingress) pour garantir une sécurité optimale. - Activez l’authentification dans Nexus pour mieux contrôler les accès Docker si besoin.
✅ Conclusion
Vous venez de déployer un proxy Docker Hub fonctionnel grâce à Nexus Repository sur Kubernetes. Ce miroir Docker privé améliore significativement vos flux Docker en entreprise tout en optimisant vos performances réseau.
En suivant précisément ce guide détaillé, vous obtenez une installation propre, efficace et sécurisée.
N’hésitez pas à explorer d’autres fonctionnalités Nexus pour enrichir votre stratégie DevOps !
Mots clés SEO : Nexus, Docker Hub, proxy Docker, Docker Registry, Kubernetes, Nexus OSS, docker registry mirror, Ingress, cert-manager, configuration docker daemon.