Le registre Docker est une application qui vous permet de stocker et de distribuer les images Docker en interne (au sein de votre organisation). Docker a même un registre public, connu sous le nom de Docker Hub, gratuit pour stocker les images Docker.
Mais le problème avec le registre public Docker est que les images que vous y téléchargez deviennent publiques. Ce n'est pas ce à quoi vous ou votre organisation vous attendez lorsque vous travaillez pendant de longues heures pour construire une image et que cela devient public.
Pour surmonter cet obstacle, vous pouvez configurer un registre Docker pour votre projet en privé afin que seul vous ou votre organisation puissiez y stocker les images Docker et les distribuer à vos collègues.
Ici, dans ce guide technique, nous discuterons de la configuration du registre privé Docker sur CentOS 7 / Ubuntu 16.04 / Fédora 26/ 25 .
Infrastructures
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042710295339.png)
Nom d'hôte | Adresse IP | Système d'exploitation | Objectif |
---|---|---|---|
registry.itzgeek.local | 192.168.12.10 | CentOS 7 | Agit en tant que serveur de registre privé Docker |
build.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | Agit comme un nœud de moteur Docker où les développeurs créeront les images Docker avec dockerfile ou docker compose, puis téléchargeront ces images sur le serveur de registre privé docker ci-dessus. |
deploy.itzgeek.local | 192.168.12.30 | Fédora 26/25 | Agit comme un nœud de moteur Docker où nous déployons des conteneurs téléchargés (pull) à partir d'un serveur de registre privé. |
Prérequis
Installez le moteur Docker sur tous vos nœuds et assurez-vous que le service Docker est opérationnel.
LIRE :Comment installer Docker CE sur CentOS 7
LIRE :Comment installer Docker CE sur Ubuntu 16.04
LIRE :Comment installer Docker CE sur Fedora 26/25
Configurer le registre privé Docker
Connectez-vous au nœud de registre et extrayez l'image de registre de Docker Hub.
[root@registry ~]# docker pull registry
Choisissez si vous souhaitez opter pour un registre Docker simple ou sécurisé.
Registre Docker standard
[root@registry ~]# docker run -dit -p 5000:5000 --name registry registry
Registre privé Docker sécurisé
Par défaut, le nœud Docker utilise une connexion sécurisée sur TLS pour charger ou télécharger des images vers ou depuis le registre privé. Vous pouvez utiliser des certificats TLS signés par une autorité de certification ou auto-signés sur le serveur de registre.
Ici, je vais utiliser un certificat auto-signé pour sécuriser Docker Registry. Créons un certificat auto-signé à l'aide de la commande suivante.
[root@registry ~]# mkdir -p /certs [root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/ca.key -x509 -days 365 -out /certs/ca.crt Generating a 4096 bit RSA private key ............................................++ .....................................................................................................++ writing new private key to '/certs/ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:IN State or Province Name (full name) []:TN Locality Name (eg, city) [Default City]:CHN Organization Name (eg, company) [Default Company Ltd]:ITzGeek Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:registry.itzgeek.local Email Address []:[email protected]
Remplacez "registry.itzgeek.local ” avec le FQDN de votre serveur de registre.
Certificat généré "ca.crt" doivent être placés sur tous vos nœuds de construction/déploiement pour faire confiance à ce certificat.
Démarrez le conteneur de registre Docker avec les informations de certificat.
[root@registry ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt -e REGISTRY_HTTP_TLS_KEY=/certs/ca.key registry
Maintenant, vous avez un conteneur de serveur de registre nommé "registre " exécuté sur " registry.itzgeek.local ".
[root@registry ~]# docker ps
Sortie :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8641fbc895f5 registry "/entrypoint.sh /e..." 44 seconds ago Up 41 seconds 0.0.0.0:5000->5000/tcp registry
Pare-feu
Vous devrez ouvrir les ports suivants sur le pare-feu pour que le registre Docker soit disponible en dehors du réseau (vers build.itzgeek.local /deploy.itzgeek.local )
Vous devez exécuter la commande suivante sur le serveur Docker Registry (registry.itzgeek.local), en fonction de votre système d'exploitation.
Si votre registre Docker est sur CentOS 7 / Fedora 26/25,
[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp [root@registry ~]# firewall-cmd --reload
Si votre registre Docker est sur Ubuntu 16.04,
root@registry:~# ufw status root@registry:~# ufw allow 5000/tcp root@registry:~# ufw reload ufw enable
Le registre Docker est maintenant prêt à distribuer des images Docker.
Créer et télécharger une image Docker sur un serveur de registre privé
Connectez-vous à votre nœud de moteur Docker de construction, ex. "build.itzgeek.local ”
Créer une image Docker
Créons une image Docker (pour un conteneur Docker personnalisé) pour la télécharger sur le serveur de registre privé. Vous pouvez construire/créer des images de conteneur de trois manières.
1. Engagez-vous
2. Dockerfile
3. Docker Compose.
Construisez et gardez votre image docker prête à être téléchargée en suivant l'une des méthodes répertoriées ci-dessus.
LIRE :Comment créer des images Docker avec Docker Commit
LIRE :Comment créer des images Docker avec DockerFile
J'ai construit une image docker appelée "mycentos:httpdv1.0 ” sur “build.itzgeek.local " et nous allons maintenant le télécharger sur le serveur de registre privé.
root@build:~# docker images
Sortie :
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042710295304.png)
Maintenant, renommez l'image docker quelque chose comme registryserver:portnumber/image name:tag
.
Si le nom de l'image ne correspond pas au format donné, la commande docker push ou pull essaiera de charger ou de télécharger l'image à partir du registre public, et non du registre privé.
Pour renommer l'image docker, utilisez docker tag
commande.
root@build:~# docker tag mycentos:httpdv1.0 registry.itzgeek.local:5000/mycentos:httpdv1.0
Vérifiez à nouveau la liste des images Docker.
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042710295475.png)
Télécharger une image Docker
Dépend du mode de communication (sécurisé ou non sécurisé ) de Docker Registry, suivez l'une des méthodes ci-dessous.
Non sécurisé (registre HTTP simple)
Editer/Créer le fichier « daemon.json " dans " /etc/docker/ ” répertoire.
root@build:~# vi /etc/docker/daemon.json
Ajoutez-y le contenu suivant.
{ "insecure-registries" : ["registry.itzgeek.local:5000"] }
Sécurisé (auto-signé)
Copiez le certificat "ca.crt " du serveur de registre " registry.itzgeek.local ” à “/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt ” sur “build.itzgeek.local ".
root@build:~# mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/ root@build:~# scp -pr [email protected]:/certs/ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
Dans les deux cas, vous devrez redémarrer le service du moteur Docker.
root@build:~# systemctl restart docker
Téléchargez l'image Docker sur le serveur de registre privé à l'aide de la commande suivante.
root@build:~# docker push registry.itzgeek.local:5000/mycentos:httpdv1.0
Téléchargez et déployez l'image du conteneur Docker à partir du serveur de registre privé
Connectez-vous à votre nœud de déploiement de moteur Docker, ex. « deploy.itzgeek.local ".
Selon le mode de communication (sécurisé ou non sécurisé) de Docker Registry, suivez l'une des méthodes ci-dessous.
Non sécurisé (registre HTTP simple)
Editer/Créer le fichier « daemon.json " dans " /etc/docker/ ” répertoire.
[root@deploy ~]# vi /etc/docker/daemon.json
Ajoutez-y le contenu suivant.
{ "insecure-registries" : ["registry.itzgeek.local:5000"] }
Sécurisé (auto-signé)
Copiez le certificat "ca.crt " du serveur de registre " registry.itzgeek.local ” à “/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt ” sur “deploy.itzgeek.local ".
[root@deploy ~]# mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/ [root@deploy ~]# scp -pr [email protected]:/certs/ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
Dans les deux cas, vous devrez redémarrer le service du moteur Docker.
[root@deploy ~]# systemctl restart docker
Téléchargez l'image Docker sur le serveur de registre privé à l'aide de la commande suivante.
[root@deploy ~]# docker pull registry.itzgeek.local:5000/mycentos:httpdv1.0
Maintenant, vérifiez la liste des images disponibles en utilisant "images docker ” commande
[root@deploy ~]# docker images
Sortie :
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042710295444.png)
L'image Docker est maintenant prête à être déployée.
LIRE :Comment déployer des conteneurs Docker – Interface de ligne de commande
C'est tout.