GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment créer un registre Docker privé sur Ubuntu Linux

Vous cherchez un endroit pour stocker en toute sécurité vos images Docker personnalisées pour vos projets personnels ou les utiliser au sein de votre organisation ? Ou peut-être un système centralisé pour gérer vos processus d'intégration et de déploiement continus ? Un endroit où vous pouvez extraire et télécharger vos images personnalisées pour votre application à volonté et améliorer le taux de déploiement ?

Cherchez pas plus loin! Un registre Docker privé rend tout cela possible ! Ce didacticiel étape par étape vous guidera dans la création de votre propre registre Docker privé. Plongez pour commencer !

Prérequis

Pour suivre ce tutoriel, assurez-vous d'avoir les éléments suivants :

  • Deux Ubuntu 20.04 LTS dispositifs. L'un hébergera le registre Docker et l'autre agira comme une machine cliente pour envoyer des requêtes à votre registre Docker.
  • NGINX est requis uniquement sur la machine hôte pour configurer le cryptage SSL et l'authentification HTTP.
  • Un nom de domaine enregistré. NGINX acheminera le trafic vers votre nom de domaine enregistré vers votre registre Docker exécuté dans un conteneur.
  • Vous avez besoin de Docker sur la machine hôte et sur la machine cliente pour ce didacticiel. L'installation par défaut suffit.
  • Docker-composer dans la machine hôte du registre Docker pour configurer et démarrer les composants de votre registre Docker. Connexe :Tout ce que vous devez savoir sur l'utilisation de Docker Compose

Configuration du registre Docker

La première étape à suivre consiste à configurer le registre Docker sur le périphérique hôte, fourni sous forme d'image gratuite sur Docker Hub.

Au lieu d'être limité à l'émission de commandes Docker pour accomplir cette tâche, vous allez créer un docker-compose.yml dossier. Le fichier utilise le format de fichier docker-compose et peut configurer les composants requis pour le registre Docker avec une relative facilité.

Pour suivre, ouvrez votre client SSH préféré et connectez-vous à l'appareil qui sera le serveur de registre.

1. Dans le /accueil répertoire, créez un répertoire appelé docker-registry avec le mkdir commande :

# Creating working directory
mkdir docker-registry

2. Accédez au docker-registry répertoire :

# Navigate to the working directory
cd ~/docker-registry

3. À l'intérieur du docker-registry répertoire, créez un sous-répertoire appelé data . À l'intérieur des données répertoire est l'endroit où le registre Docker stockera les images Docker. Les données Le répertoire agit comme un système de fichiers pour le registre Docker afin de conserver les images Docker.

# Create filesystem to persist data
mkdir data

4. À l'intérieur du docker-registry répertoire, créez un docker-compose.yml fichier :

# Create the docker-compose file
nano docker-compose.yml 

Vous trouverez des configurations pour définir le registre dans le fichier nouvellement créé. Parmi les paramètres, vous remarquerez :

  • Définit le registry service avec le registry:latest image avec le latest balise.
  • Définit la politique de redémarrage pour le registry service à always . Sous réserve que le moteur Docker soit en cours d'exécution, le registry le service redémarrera toujours lorsqu'il sera arrêté.
  • Les ports la section mappe le port 5000 dans le conteneur de registre au port 5000 sur la machine hôte.
  • Le registry service dans l'environment la section définit la variable d'environnement REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY aux données répertoire créé précédemment.
  • Docker nécessite un volume pour conserver les images Docker dans le registry récipient. Vous ajouterez les volumes objet pour mapper les /données répertoire sur la machine hôte vers /data répertoire dans le conteneur.

Le mappage stockera les données sur le système de fichiers de la machine hôte plutôt qu'à l'intérieur du conteneur. Étant donné que Docker stocke désormais les données sur la machine hôte, elles peuvent être sauvegardées, migrées, chiffrées ou remplacées.

Ci-dessous, vous pouvez voir la configuration YAML complète des composants nécessaires pour démarrer et exécuter le registre Docker. Copiez le code YAML ci-dessous et collez-le dans le docker-compose.yml fichier que vous avez créé et enregistrez-le avec CTRL + S et appuyez sur CTRL + X pour quitter :

version: '3.3' 
services:
  registry:
    image: registry:latest 
		restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data 
    volumes:
      - ./data:/data 

Docker-compose exécute plusieurs conteneurs comme une seule application. Le docker-compose.yml Le fichier configure ces multiples conteneurs dans le cadre des services.

5. Maintenant, exécutez le fichier docker-compose et créez et démarrez le registre Docker :

# Start docker registry application
sudo docker-compose up

Dans la sortie de la commande ci-dessous, vous pouvez voir le registre Docker en cours d'exécution. Pour fermer l'application, appuyez sur CTRL + C .

Configuration de NGINX

Maintenant que le registre Docker est configuré, il est temps de configurer NGINX sur la machine hôte. NGINX transmettra le trafic des appareils clients au registre Docker. Pour ce tutoriel, vous allez rediriger le trafic via un nom de domaine. Lisez la suite pour aborder cette étape.

Dans un premier temps, vous devrez configurer la redirection de port NGINX pour votre domaine via /etc/nginx/sites-available/your_domain_name fichier.

1. Créez le fichier avec la commande suivante :

# Creating configuration for your domain
sudo nano /etc/nginx/sites-available/your_domain_name 

Vous trouverez de nombreuses références à votre_nom_de_domaine dans les sections suivantes . Cette chaîne est un espace réservé. N'oubliez pas de le remplacer par un nom de domaine que vous possédez lorsque vous essayez vous-même les commandes. Dans les exemples register.joeshiett.xyz est le nom de domaine sélectionné.

2. Copiez la configuration NGINX suivante et ajoutez-la à votre_nom_de_domaine fichier que vous avez créé :

server {
	listen 80;
  # Replace your_domain_name with your domain name
  server_name your_domain_name;

    location / {
      # Do not allow connections from docker 1.5 and earlier
      # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
      if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
        return 404;
      }

      proxy_pass                          http://localhost:5000;
      proxy_set_header  Host              $http_host;   # required for docker client's sake
      proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
      proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto $scheme;
      proxy_read_timeout                  900;
    }
}

3. La redirection de port n'est pas encore terminée. Vous devez d'abord joindre un lien symbolique. Vous lierez /etc/nginx/sites-available/your_domain_name fichier de configuration dans /etc/nginx/sites-enabled/. La commande complète suit :

cd /etc/nginx/sites-enabled/ && sudo ln -s /etc/nginx/sites-available/your_domain_name .

4. Redémarrez le service NGINX après avoir créé le lien symbolique :

# Restarting Nginx service
sudo systemctl restart nginx 

Ouvrez le navigateur sur votre appareil client et accédez à https://your_domain_name/v2/ pour accéder à la v2 point de terminaison, l'API HTTP Docker.

L'image ci-dessous montre la sortie attendue du terminal hôte après avoir navigué vers le lien. L'image montre également que le navigateur a envoyé un GET requête à l'API HTTP Docker via la v2 point final.

Après avoir accédé à la v2 endpoint via le lien, un objet JSON vide – {} – sera affiché sur la fenêtre du navigateur.

Configuration de la taille de téléchargement du fichier NGINX

La limite de taille de téléchargement par défaut de NGINX est de 1m , où m signifie mégaoctet. La limite par défaut n'est pas suffisante pour télécharger des images Docker dans votre registre. Pour changer cette valeur, modifiez nginx.conf, NGINX accepte donc les téléchargements de fichiers volumineux.

1. Encore une fois, connectez-vous à la machine hôte.

2. Modifiez le fichier /etc/nginx/nginx.conf fichier :

3. Sous le http section dans nginx.conf fichier, ajoutez la ligne suivante pour augmenter la taille de téléchargement afin d'accueillir 8 192 mégaoctets, et enregistrez le fichier :

client_max_body_size 8192m;

La configuration ressemblera un peu à ceci :

Configurer SSL

Un certificat SSL est requis pour sécuriser la connexion au registre Docker. Pour ajouter un certificat SSL, vous devez installer Certbot sur l'hôte du registre.

Vous pouvez installer Certbot avec le gestionnaire de paquets snap. Le gestionnaire de paquets Snap est déjà préinstallé dans Ubuntu 20.04.

1. Pour installer Certbot, exécutez la commande suivante sur votre ordinateur hôte :

# Install certbot using the snap package manager
sudo snap install --classic certbot

2. Ajoutez Certbot à PATH afin que les commandes Certbot puissent fonctionner en créant un lien symbolique :

# Attaching certbot to PATH
sudo ln -s /snap/bin/certbot /usr/bin/certbot

3. Exécutez cette commande pour obtenir un certificat et demander à Certbot de modifier automatiquement votre configuration NGINX, et également d'activer l'accès HTTPS pour votre domaine :

# Creating a certificate and enabling HTTPS access
sudo certbot --nginx

Certbot modifiera le votre_nom_de_domaine fichier de configuration dans /etc/nginx/sites-enabled/ répertoire et appliquez un certificat SSL à votre nom de domaine.

L'image ci-dessous montre quelle est la configuration finale de votre /etc/nginx/sites-enabled/your_domain_name le fichier ressemblera après que Certbot aura appliqué les certificats.

Si vous accédez à https://your_domain_name/ , vous trouverez qu'il est sécurisé avec le certificat de Certbot.

Configuration de l'authentification HTTP pour Docker Registry

C'est toujours une bonne idée d'avoir de bonnes pratiques de sécurité. Ainsi, vous sécuriserez votre registre Docker et limiterez l'accès à vous seul et à certains autres utilisateurs que vous souhaiterez peut-être ajouter. Vous utiliserez l'authentification HTTP, fournie par HTTP Basic Auth .

1. L'authentification HTTP nécessite un htpasswd fichier avec votre nom d'utilisateur et votre mot de passe. Pour créer le htpasswd l'authentification, vous devrez installer le apache2-utils paquet :

# Installing apache2-utils package
sudo apt-get install apache2-utils

2. Après avoir installé apache2-utils créer un registry.credentials fichier dans /etc/nginx répertoire avec le httpasswd commande. Ajoutez un nom d'utilisateur préféré en remplaçant your_username dans la commande ci-dessous. Ensuite, ajoutez un mot de passe de votre choix lorsque vous y êtes invité. La commande complète et sa sortie sont ci-dessous.

# Creating to creating auth credentials
sudo htpasswd -c /etc/nginx/registry.credentials your_username

3. Après avoir créé le registry.credentials , accédez à votre fichier de configuration NGINX pour votre registre Docker sur /etc/nginx/sites-available/your_domain_name . Ajoutez le texte suivant au fichier de configuration NGINX dans le server rubrique :

server {
	...
	...
	location / {
			...
			auth_basic            "Basic Auth";
      auth_basic_user_file  "/etc/nginx/registry.credentials";
			...
	}
}

4. Redémarrez à nouveau NGINX et réappliquez les configurations avec la commande suivante :

# Restarting nginx
sudo systemctl restart nginx

L'image ci-dessous montre que lorsque vous essayez d'accéder à https://your_domain_name/ sur votre navigateur, vous serez invité à entrer votre nom d'utilisateur et votre mot de passe. Pour ce didacticiel, le registre Docker s'exécute sur un sous-domaine registry.joeshiett.xyz , avec SSL activé.

Pousser l'image vers le référentiel Docker privé

Maintenant que votre registre Docker est en cours d'exécution et capable d'accepter des téléchargements de fichiers plus volumineux, vous allez lui envoyer une image. Pour pousser une image vers votre registre Docker, vous devez accéder à votre ordinateur client.

Si vous n'avez pas d'image Docker stockée localement sur votre ordinateur client, vous pouvez en extraire une gratuitement depuis Docker Hub.

1. Exécutez la commande suivante pour extraire une image Alpine Linux du hub Docker, définissez le nom de l'image sur test-image , et exécutez le conteneur dans le shell interactif :

# Pull and run Alpine container
sudo docker run --name test-image -it alpine:latest /bin/sh

2. Une fois dans le conteneur Alpine, créez un fichier appelé TEST . Ce fichier sera alors la confirmation que l'image que vous allez extraire de votre registre Docker est celle que vous modifiez maintenant :

# create a file called TEST
touch /TEST

3. Quittez le shell interactif en tapant exit sur votre terminal.

4. Créez maintenant une image Docker à partir du conteneur Alpine Docker nommé test-image , vous venez de personnaliser :

# Creating Docker image
sudo docker commit test-image your_domain_name/test-image:latest

L'image Alpine que vous avez extraite et personnalisée précédemment est désormais disponible localement avec un référentiel appelé your_domain_name/test-image et balisez latest .

5. Pour pousser votre image nouvellement créée vers votre registre Docker, connectez-vous à votre registre Docker avec la commande ci-dessous :

# Login to Docker registry
sudo docker login https://your_domain_name 

Vous serez invité à entrer votre nom d'utilisateur et votre mot de passe que vous avez configurés dans la section précédente. La sortie sera :

...
Login Succeeded
...

6. Une fois connecté, transférez l'image taguée vers votre référentiel Docker :# Pushing docker image sudo docker push your_domain_name/test-image:latest

# Pushing docker image
sudo docker push your_domain_name/test-image:latest

La sortie de la commande ressemblera à ceci :

Extraction d'une image du référentiel Docker privé

Maintenant que vous avez réussi à transférer votre image Docker vers votre référentiel Docker privé, il est temps d'extraire l'image que vous venez de transférer.

1. Tout d'abord, vous devez vous connecter à votre référentiel Docker privé :# Login to Docker registry sudo docker login https://your_domain_name

# Login to Docker registry
sudo docker login https://your_domain_name 

2. Une fois connecté, vous extrayez l'image Docker créée précédemment :

# Pull Docker image from Docker registry
sudo docker pull your_domain_name/test-image

Dans l'image ci-dessous, vous pouvez voir que Docker extrait l'test-image avec succès.

3. Temps d'exécution d'un shell interactif :

sudo docker run -it your_domain_name/test-image /bin/sh

4. Dans le shell interactif, exécutez la commande suivante :

ls

Sur l'image ci-dessous, vous pouvez voir que le TEST le fichier créé précédemment se trouve à l'intérieur du conteneur.

Vous avez maintenant testé avec succès votre registre Docker et vous êtes prêt à partir !

Conclusion

Dans ce didacticiel, vous avez créé votre propre registre Docker privé. Vous avez installé les prérequis nécessaires ; configurer l'authentification SSL et HTTP. Et puis vous avez finalement poussé et extrait une image de votre registre.

Alors, quels packages prévoyez-vous d'ajouter à votre registre ?


Docker
  1. Comment configurer et utiliser le registre Docker privé

  2. Comment configurer un registre Docker privé sur Rocky Linux 8

  3. Comment installer Docker sur Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  4. Comment créer, répertorier et supprimer des conteneurs Docker sous Linux

  5. Comment installer Docker sur Ubuntu 18.04 ?

Comment créer un utilisateur Sudo dans Ubuntu Linux

Comment installer Docker CE dans Linux Mint 20

Comment installer Docker sur Ubuntu 20.04, 18.04, 21.04

Comment installer Docker sur Ubuntu 14.04

Comment installer Docker Compose sur Ubuntu

Comment installer Docker sur Ubuntu 18.04