Pour un développement CI/CD fluide à l'aide de la plate-forme Docker, envisagez d'utiliser un serveur de registre Docker auto-hébergé. Le registre Docker est le référentiel dans lequel vous pouvez stocker vos images Docker et les extraire pour exécuter des applications sur le serveur. Pour une livraison plus rapide ainsi qu'une infrastructure sécurisée, il est recommandé de configurer votre propre registre privé Docker pour stocker vos images Docker et les distribuer entre les organisations. Dans cet article, nous allons apprendre à configurer le registre Docker privé sur Ubuntu 20.04
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.
Registre Docker privé
Docker Registry est une application côté serveur qui vous permet de stocker vos images Docker localement dans un emplacement centralisé. En configurant votre propre serveur de registre Docker, vous pouvez extraire et envoyer des images Docker sans avoir à vous connecter au hub Docker, économisant ainsi votre bande passante et vous protégeant des menaces de sécurité.
Lire aussi :Comment installer et utiliser Docker sur Ubuntu 20.04 / 20.10
Avant de commencer
Avant de commencer, je m'assure que vous avez installé Docker et Docker-Compose sur le serveur client et le serveur de registre local. Pour vérifier que vous avez installé le logiciel requis, vous pouvez exécuter les commandes suivantes pour vérifier la version du logiciel.
Version $ docker
$ version docker-compose
En outre, vous devez vous assurer que le service Docker est démarré et configuré pour s'activer au démarrage :
$ sudo systemctl start docker$ sudo systemctl enable docker
Installer et configurer le registre Docker privé
Pour configurer Private Docker Registry, suivez les étapes :
Créer des répertoires de registre
Configurez votre serveur qui va héberger un registre privé. Créez un nouveau répertoire qui stockera tous les fichiers de configuration requis.
Utilisez la commande suivante pour créer un nouveau répertoire de projet « my-registry » et deux sous-répertoires « nginx » et « auth ». Vous pouvez avoir votre propre hypothèse pour le nom du projet.
$ mkdir -p mon-registre/{nginx, auth}
Accédez maintenant au répertoire du projet et créez de nouveaux répertoires dans nginx en tant que :
$ cd mon-registre/$ mkdir -p nginx/{conf.d/, ssl}
Créer un script et des services Docker-Compose
Vous devez créer un nouveau script docker-compose.yml qui définit la version de docker-compose et les services requis pour configurer un registre privé.
Créez un nouveau fichier "docker-compose.yml" dans le répertoire "my-registry" avec l'éditeur vi.
$ vi docker-compose.yml
Définissez votre service dans le fichier docker-compose comme :
SERVICES:# Registre de registre:Image:Redémarrage:2 Redémarrage:Toujours Ports:- "5000:5000" Environnement:Registry_Auth:HTPASSWD Registry_auth_htpasswd_realm:Registry-Registry_auth_htpasswd_Path:/Auth/registry.Passwd registry_storage_filesystem_rootdirectory:/ Volumes de données:- myregistrydata:/data - ./auth:/auth réseaux : - mynet#Nginx Service nginx : image :nginx:alpine container_name :nginx restart :until-stopped tty:true ports : - "80:80" - "443:443" volumes : - ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ réseaux : - mynet#Docker Networksnetworks : mynet : pilote :bridge# Volumesvolumes : myregistrydata : pilote :local
Enregistrez et fermez le fichier
Configurer le transfert de port nginx
Nous devons créer une configuration d'hôte virtuel nginx pour le service Web nginx. Accédez au répertoire nginx/conf.d/ créé à l'étape ci-dessus.
$ cd nginx/conf.d/
Créez maintenant un fichier d'hôte virtuel nginx avec votre éditeur de texte. Dans cet exemple, je vais le nommer myregistry.conf. Vous pouvez avoir votre propre hypothèse.
$ vi monregistre.conf
Ajoutez le contenu suivant :
docker-registry en amont { serveur registre :5000 ;}serveur { écouter 80 ; nom_serveur registre.linuxtechi.com ; renvoie 301 https://registry.linuxtechi.com$request_uri;}serveur { écoute 443 ssl http2 ; nom_serveur registre.linuxtechi.com ; certificat_ssl /etc/nginx/ssl/certificate.crt ; clé_certificat_ssl /etc/nginx/ssl/private.key ; # Fichiers journaux pour le débogage error_log /var/log/nginx/error.log ; access_log /var/log/nginx/access.log ; emplacement / { si ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) { renvoie 404 ; } proxy_pass http://docker-registry ; proxy_set_header Hôte $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 votre nom de domaine par le paramètre server_name et enregistrez le fichier.
Augmenter la taille de téléchargement du fichier nginx
Par défaut, nginx a une limite de 1 Mo pour télécharger des fichiers. Comme les images docker dépassent 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 la ligne suivante et enregistrez le fichier
client_max_body_size 2G ;
Configurer le certificat SSL et l'authentification
Après avoir créé le fichier de configuration nginx, nous devons maintenant configurer un 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 sous :
$ cd myregistry/nginx/ssl$ cp /your-ssl-certificate-path/certificate.crt .$ cp /your-private-key-path/private.key .
Si vous n'avez pas de certificat SSL acheté valide, vous pouvez générer votre propre certificat SSL auto-signé. N'oubliez pas qu'un certificat SSL auto-signé n'est pas recommandé pour les environnements 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.crtIl vous sera demandé de soumettre des détails tels que le code du pays, le nom de domaine, l'identifiant de messagerie. Remplissez les détails et continuez.
Maintenant, configurez l'authentification de base en tant que :
Aller au répertoire d'authentification
$ cd authDemandez un nouveau fichier de mot de passe nommé register.password pour votre utilisateur. Dans cet exemple, je vais utiliser l'utilisateur linuxtechi.
$ htpasswd -Bc register.password linuxtechiSi vous obtenez 'htpasswd not found command', exécutez la commande suivante dans votre terminal et réessayez.
$ sudo apt install apache2-utils -yTapez un mot de passe fort et entrez à nouveau pour confirmer votre mot de passe. Vous avez ajouté un utilisateur d'authentification de base pour le registre docker.
Exécuter le registre Docker
Vous avez terminé la configuration. Vous pouvez créer un registre à l'aide de la commande docker-compose.
Allez dans le répertoire où nous créons le fichier docker-compose.yml
$ cd monregistreExécutez maintenant la commande suivante :
$ docker-compose up -dLe registre Docker est maintenant opérationnel, vous pouvez vérifier les conteneurs en cours d'exécution à l'aide de la commande suivante :
$ docker ps-aVous obtiendrez la sortie suivante :
Extraire l'image de Docker Hub vers un registre privé
Pour stocker une image du hub Docker dans un registre privé, utilisez la commande docker pull pour extraire les images docker du hub docker. Dans cet exemple, je vais extraire l'image docker des centos.
$ docker pull centosAprès avoir réussi à extraire des images du docker hub, étiquetez une image pour l'étiqueter pour le registre privé.
Dans cet exemple, je vais baliser les images centos comme suit :register.linuxtechi.com/linuxtechi-centos
$ balise d'image docker [nom de l'image] register.linuxtechi.com/[nouveau-nom-de-l'image]
Exemple :
Balise $ docker images centos Registry.linuxtechi.com/linuxtechi-centosPour vérifier si l'image docker est disponible localement ou non, exécutez la commande suivante.
$ images dockerPousser l'image docker vers le registre privé
Vous avez extrait l'image Docker du hub Docker et créé une balise pour le registre privé. Vous devez maintenant transférer l'image docker locale vers le registre privé.
Tout d'abord, connectez-vous à votre registre privé à l'aide de la commande suivante :
$ connexion docker https://registry.linuxtechi.com/v2/Utilisez votre propre URL de registre à la place de "https://registry.linuxtechi.com"
Vous serez invité à entrer votre nom d'utilisateur et votre mot de passe ; vous recevrez un message de connexion réussie comme :
Vous pouvez maintenant transférer votre image docker vers un registre privé. Pour pousser l'image, exécutez la commande suivante :
$ docker push register.linuxtechi.com/linuxtechi-centosRemplacez le nom de votre image après "docker push"
Une fois le push terminé, vous pouvez accéder au navigateur et saisir l'url :
https://registry.linuxtechi.com/v2/_catalog
Remplacez register.linuxtechi.com par votre propre URL et fournissez une authentification de base. Vous trouverez la liste des référentiels sous la forme :
Extraction de l'image docker du registre privé
Vous avez poussé votre image Docker locale vers votre registre Docker privé. De la même manière, vous pouvez extraire des images Docker de votre registre privé Docker vers le serveur local.
Exécutez la commande suivante pour vous connecter à votre serveur de registre privé.
$ connexion docker https://registry.linuxtechi.comRemplacez register.linuxtechi.com par votre propre URL de registre privé et fournissez une authentification de base. Une fois la connexion réussie, exécutez la commande suivante pour extraire l'image docker du registre privé. Dans cet exemple, je vais extraire l'image docker précédemment poussée sur le serveur local. Vous pouvez avoir votre propre hypothèse pour le nom de l'image docker.
$ docker pull register.linuxtechi.com/linuxtechi-centosVous aurez une sortie similaire à :
Conclusion :
Dans l'article, vous avez appris comment héberger votre propre registre Docker privé. Vous avez également une idée de la façon d'extraire des images du hub Docker vers un serveur local, de marquer l'image et de la pousser dans le registre privé. Vous avez également appris à extraire des images Docker du registre privé du serveur local.
Lire aussi :Comment installer KVM sur le serveur Ubuntu 20.04 LTS (Focal Fossa)