Dans cet article, nous allons apprendre à configurer un référentiel docker privé sur Ubuntu 20.04.
Pourquoi Docker Registry privé ?
Pour un développement CI/CD fluide à l'aide de la plate-forme Docker, envisagez d'utiliser un registre Docker auto-hébergé. Pour une livraison plus rapide et une infrastructure sécurisée, il est recommandé de configurer votre propre registre privé Docker pour stocker vos images Docker et les distribuer au sein de votre organisation.
prérequis
- Compte utilisateur avec privilèges sudo
- Un serveur pour le registre Docker
- Nginx sur le serveur Docker Registry
- Un serveur client
- Docker et Docker-Compose sur les deux serveurs.
Qu'est-ce qu'un registre Docker privé ?
Docker Registry est une application côté serveur qui vous permet de stocker des images Docker localement dans un emplacement centralisé. En configurant votre propre serveur Docker Registry, vous pouvez extraire et envoyer des images Docker sans vous connecter à Docker Hub, ce qui permet d'économiser de la bande passante et de prévenir les menaces de sécurité.
Avant de commencer, assurez-vous d'avoir installé Docker et Docker-Compose sur le serveur client et le serveur d'images local. Si vous devez vérifier si le logiciel requis est installé, vous pouvez exécuter la commande suivante pour vérifier la version du logiciel.
$ docker version
$ docker-compose version
En outre, vous devez vous assurer que le service Docker est démarré et activé au démarrage.
$ sudo systemctl start docker
$ sudo systemctl enable docker
Installer et configurer Docker Registry
Pour configurer un registre Docker privé, suivez ces étapes
Créer un répertoire de registre
Créez un nouveau répertoire où tous les fichiers de configuration requis seront stockés
Créez un nouveau répertoire de projet myregistry et deux sous-répertoires nginx et auth à l'aide de la commande suivante
$ mkdir -p myregistry/{nginx, auth}
Créez deux sous-répertoires conf.d et ssl dans le répertoire nginx
$ cd my-registry/
$ mkdir -p nginx/{conf.d/, ssl}
Créer des scripts et des services Docker-Compose
Créez un fichier docker-compose.yml dans le répertoire myregistry
$ vi docker-compose.yml
Définissez le service dans le fichier docker-compose.yml
services:
#Registry
registry:
image: registry:2
restart: always
ports:
- "5000:5000"
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- myregistrydata:/data
- ./auth:/auth
networks:
- mynet
#Nginx Service
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d/:/etc/nginx/conf.d/
- ./nginx/ssl/:/etc/nginx/ssl/
networks:
- mynet
#Docker Networks
networks:
mynet:
driver: bridge
#Volumes
volumes:
myregistrydata:
driver: local
Enregistrez et fermez le fichier
Configurer le transfert de port nginx
Créez une configuration d'hôte virtuel pour le service nginx, accédez au répertoire nginx/conf.d créé dans les étapes ci-dessus
$ cd nginx/conf.d/
Créer un fichier d'hôte virtuel nginx
$ vi myregistry.conf
Ajoutez ce qui suit
upstream docker-registry {
server registry:5000;
}
server {
listen 80;
server_name registry.linuxtechi.com;
return 301 https://registry.linuxtechi.com$request_uri;
}
server {
listen 443 ssl http2;
server_name registry.linuxtechi.com;
ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
# Log files for Debug
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
return 404;
}
proxy_pass http://docker-registry;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
}
Remplacez le paramètre server_name par votre propre nom de domaine et enregistrez le fichier
Augmenter la taille de téléchargement du fichier nginx
Par défaut, nginx télécharge des fichiers avec une limite supérieure de 1 Mo. Lorsque l'image docker dépasse cette limite, vous devez augmenter la taille de téléchargement dans le fichier de configuration nginx. Dans cet exemple, je vais créer un fichier de configuration nginx supplémentaire avec une limite de téléchargement de 2 Go.
Allez dans le répertoire de configuration de nginx
$ cd myregistry/nginx/conf.d
$ vi additional.conf
Ajoutez les lignes suivantes et enregistrez le fichier
client_max_body_size 2G;
Configurer les certificats SSL et l'authentification
Après avoir créé le fichier de configuration nginx, nous devons maintenant configurer le certificat SSL. Vous devez avoir un fichier de certificat SSL valide avec une clé privée. Copiez votre fichier de certificat et votre clé privée dans le répertoire nginx/ssl et exécutez la commande suivante :
$ cd myregistry/nginx/ssl
$ cp /your-ssl-certificate-path/certificate.crt .
$ cp /your-private-key-path/private.key .
Si vous ne disposez pas d'un certificat SSL acheté valide, vous pouvez générer votre propre certificat SSL auto-signé. Il n'est pas recommandé d'utiliser un certificat SSL auto-signé dans un environnement de production.
Pour générer un certificat SSL auto-signé, exécutez la commande suivante :
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout \
/etc/ssl/private/nginx-private.key -out /etc/ssl/certs/nginx-certificate.crt
Il vous sera demandé de soumettre des détails tels que le code du pays, le nom de domaine, l'e-mail, de remplir les détails et de continuer.
Configurer l'authentification de base
Allez dans le répertoire auth
$ cd auth
Exécutez la commande suivante pour créer un fichier de mots de passe, le nom d'utilisateur est : linuxtechi
$ htpasswd -Bc registry.password linuxtechi
Si le système invite la commande htpasswd introuvable, veuillez exécuter la commande suivante dans le terminal et réessayer
$ sudo apt install apache2-utils -y
Entrez un mot de passe fort et entrez-le à nouveau pour confirmer le mot de passe
Exécuter le registre Docker
Vous avez terminé l'installation et pouvez maintenant créer le registre à l'aide de la commande docker-compose
Allez dans le répertoire myregistry
$ cd myregistry
Exécutez la commande suivante pour créer l'image
$ docker-compose up -d
Docker Registry a démarré, vérifiez avec la commande suivante
$ docker ps -a
Extraire l'image de Docker Hub vers le registre privé
Pour stocker une image du hub Docker dans un registre privé, utilisez la commande Docker pull pour extraire l'image Docker du hub Docker. Dans cet exemple, je vais extraire l'image du docker centos.
$ docker pull centos
Après avoir réussi à extraire l'image du docker hub, marquez-la comme registre privé
Syntaxe de balisage :
$ balise d'image docker [nom de l'image] register.linuxtechi.com/[nouveau-nom-de-l'image]
Les exemples sont les suivants :
$ docker images tag centos registry.linuxtechi.com/linuxtechi-centos
Vérifiez que l'image docker est disponible localement
$ docker images
Pousser l'image vers le registre privé
Maintenant, vous devez pousser votre image locale vers le registre privé, connectez-vous d'abord au registre privé avec la commande suivante
$ docker login https://registry.linuxtechi.com/v2/
Remplacez https://registry.linuxtechi.com par votre propre URL de registre
Vous serez invité à entrer votre nom d'utilisateur et votre mot de passe et vous recevrez un message de connexion réussie
Vous pouvez maintenant pousser l'image vers votre registre privé avec la commande suivante
$ docker push registry.linuxtechi.com/linuxtechi-centos
Une fois le push terminé, visitez l'URL dans le navigateur
https://registry.linuxtechi.com/v2/_catalog
Extraire les miroirs du registre privé
Vous avez poussé l'image Docker locale vers le registre Docker privé, de la même manière, vous pouvez extraire l'image Docker du registre privé Docker vers le serveur local.
Connectez-vous à votre serveur de registre privé en exécutant la commande suivante
$ docker login https://registry.linuxtechi.com
Exécutez la commande suivante pour extraire l'image
$ docker pull registry.linuxtechi.com/linuxtechi-centos