Docker
Registre privé / sécurisé Docker avec API v2
Recherche…
Introduction
Un registre de docker privé et sécurisé au lieu d'un Docker Hub. Les compétences de base de docker sont requises.
Paramètres
Commander | Explication |
---|---|
sudo docker run -p 5000: 5000 | Démarrez un conteneur Docker et liez le port 5000 du conteneur au port 5000 de la machine physique. |
--nom de registre | Nom du conteneur (utilisé pour améliorer la lisibilité de «docker ps»). |
-v 'pwd' / certs: / certs | Liez CURRENT_DIR / certs de la machine physique sur / certs du conteneur (comme un «dossier partagé»). |
-e REGISTRY_HTTP_TLS_CERTIFICATE = / certs / server.crt | Nous spécifions que le registre doit utiliser le fichier /certs/server.crt pour démarrer. (variable env) |
-e REGISTRY_HTTP_TLS_KEY = / certs / server.key | Identique pour la clé RSA (server.key). |
-v / root / images: / var / lib / registry / | Si vous souhaitez enregistrer toutes vos images de registre, vous devez le faire sur la machine physique. Ici, nous sauvegardons toutes les images sur / root / images sur la machine physique. Si vous faites cela, vous pouvez arrêter et redémarrer le registre sans perdre aucune image. |
registre: 2 | Nous spécifions que nous aimerions extraire l'image du registre de docker hub (ou localement), et nous ajoutons «2» car nous voulons installer la version 2 du registre. |
Remarques
Générer des certificats
Génère une clé privée RSA: openssl genrsa -des3 -out server.key 4096
Openssl devrait demander une phrase de passe à cette étape. Notez que nous n'utiliserons que des certificats pour la communication et l'authentification, sans phrase secrète. Utilisez simplement 123456 par exemple.
Générer la demande de signature de certificat: openssl req -new -key server.key -out server.csr
Cette étape est importante car vous devrez fournir des informations sur les certificats. Les informations les plus importantes sont «Nom commun», c'est-à-dire le nom de domaine, utilisé pour la communication entre le registre de docker privé et tous les autres ordinateurs. Exemple: mydomain.com
Supprimer le mot de passe de la clé privée RSA: cp server.key server.key.org && openssl rsa -in server.key.org -out server.key
Comme je l'ai dit, nous allons nous concentrer sur le certificat sans phrase secrète. Soyez donc prudent avec tous les fichiers de votre clé (.key, .csr, .crt) et conservez-les dans un endroit sûr.
Générez le certificat auto-signé: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Vous avez maintenant deux fichiers essentiels, server.key et server.crt , nécessaires à l'authentification du registre privé.
Exécutez le registre avec un certificat auto-signé
Pour exécuter le registre privé (en toute sécurité), vous devez générer un certificat auto-signé, vous pouvez vous référer à l'exemple précédent pour le générer.
Pour mon exemple, je mets server.key et server.crt dans / root / certs
Avant d'exécuter la commande docker, vous devriez être placé (utilisez cd
) dans le répertoire contenant le dossier certs . Si vous n'êtes pas et que vous essayez d'exécuter la commande, vous recevrez une erreur comme
level = fatal msg = "open /certs/server.crt: pas de tel fichier ou répertoire"
Quand vous êtes ( cd /root
dans mon exemple), vous pouvez essentiellement démarrer le registre sécurisé / privé en utilisant: sudo docker run -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key -v /root/Documents:/var/lib/registry/ registry:2
Des explications sur la commande sont disponibles dans la partie Paramètres.
Tirez ou poussez depuis un client Docker
Lorsque vous obtenez un registre en cours d'exécution, vous pouvez extraire ou diffuser des images. Pour cela, vous avez besoin du fichier server.crt dans un dossier spécial sur votre client docker. Le certificat vous permet de vous authentifier avec le registre, puis de chiffrer la communication.
Copiez server.crt de la machine de registre dans /etc/docker/certs.d/mydomain.com:5000/ sur votre ordinateur client. Et puis renommez-le en ca-certificates.crt : mv /etc/docker/certs.d/mydomain.com:5000/server.crt /etc/docker/certs.d/mydomain.com:5000/ca-certificates.crt
À ce stade, vous pouvez extraire ou pousser des images à partir de votre registre privé:
PULL: docker pull mydomain.com:5000/nginx
ou
POUSSER :
- Obtenez une image officielle de hub.docker.com:
docker pull nginx
- Marquez cette image avant de la placer dans un registre privé:
docker tag IMAGE_ID mydomain.com:5000/nginx
(utilisez lesdocker images
pour obtenir le IMAGE_ID) - Poussez l'image dans le registre:
docker push mydomain.com:5000/nginx