GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment configurer et utiliser le registre Docker privé

Présentation

Si vous souhaitez garantir un développement CI/CD fluide à l'aide de la plate-forme Docker, envisagez de configurer un registre Docker privé. Non seulement cela accélère la livraison, mais c'est aussi un moyen pratique de distribuer des ressources et de partager des images Docker entre conteneurs.

Dans ce didacticiel, découvrez comment configurer un registre Docker privé et le configurer pour l'accessibilité externe.

Prérequis

  • Accès à un compte utilisateur avec sudo ou racine privilèges
  • Un serveur client
  • Un serveur pour Docker Registry privé
  • Docker et Docker–Compose sur les deux serveurs
  • Nginx sur le serveur privé Docker Registry

Qu'est-ce qu'un registre Docker privé ?

Registre Docker est une application côté serveur et fait partie du produit de plate-forme en tant que service de Docker. Il vous permet de stocker localement toutes vos images Docker dans un emplacement centralisé.

Lorsque vous configurez un registre privé, vous affectez un serveur pour communiquer avec Docker Hub via Internet. Le rôle du serveur est d'extraire et de transférer des images, de les stocker localement et de les partager avec d'autres hôtes Docker.

En exécutant un registre accessible de l'extérieur, vous pouvez économiser des ressources précieuses et accélérer les processus. Le logiciel vous permet d'extraire des images sans avoir à vous connecter au Docker Hub, ce qui économise de la bande passante et sécurise le système contre les menaces en ligne potentielles.

Les hôtes Docker peuvent accéder au référentiel local via une connexion sécurisée et copier des images à partir du registre local pour créer leurs propres conteneurs.

Avant de commencer

Comme indiqué dans la section des prérequis, le guide suppose que Docker et Docker-Compose sont déjà installés sur tous les serveurs.

Pour vérifier que vous disposez du logiciel requis, vous pouvez vérifier leurs versions avec les commandes :

docker version
docker-compose version

Vous voudrez également vous assurer que le service Docker a démarré et qu'il est configuré pour s'activer au démarrage :

sudo systemctl start docker
sudo systemctl enable docker

Installer et configurer le registre Docker privé

Étape 1 :Créer des répertoires de registre

Commencez à configurer le serveur qui hébergera le registre privé. Vous voulez d'abord créer un nouveau répertoire qui stockera tous les fichiers de configuration requis.

1. La commande suivante crée un nouveau répertoire de projet intitulé registry et deux sous-répertoires - nginx et auth :

mkdir -p registry/{nginx, auth}

2. Accédez au registry et créez deux nouveaux répertoires dans nginx :

cd registry/
mkdir -p nginx/{conf.d/,ssl}

3. Voir la hiérarchie des répertoires nouvellement créés en tapant :

tree

Étape 2 :Créer un script Docker-Compose et définir des services

Ensuite, vous devez créer et configurer un nouveau docker-compose.yml scénario. Le script définit la version de Docker-Compose, ainsi que les services dont vous avez besoin pour configurer un registre privé.

1. Créez un nouveau fichier dans le registry répertoire, avec un éditeur de texte de votre choix :

nano docker-compose.yml

2. Il y a quelques éléments que vous devez définir dans ce fichier de configuration, alors suivez attentivement et ajoutez soigneusement chaque section du contenu :

version: '3'
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:
      - registrydata:/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:
  registrydata:
    driver: local

3. Enregistrez et fermez le fichier.

La configuration expliquée :

Tout d'abord, vous définissez la version de Docker-Compose que vous souhaitez utiliser. Dans cet exemple, il s'agit de version: '3' . Ensuite, vous passez à la définition de tous les composants du registre Docker, en commençant par le #Registry services.

Docker Registry est essentiellement un conteneur exécutant l'image de registre, c'est pourquoi l'image est définie comme registry:2 .

Ajout du restart: always garantit que vous démarrez Docker Registry en tant que service dès que vous démarrez le système.

Détermination des ports 5000:5000 indique à Docker que l'hôte et le conteneur en cours d'exécution communiquent via les numéros de port définis.

Le service montera le volume docker registrydata et le répertoire local auth , ainsi que son fichier d'authentification registry.passwd .

L'élément suivant est le #Nginx Service . La configuration décrit le service s'exécute sur les ports 80:80 (HTTPS) et 443:443 (HTTPS). Il montera le répertoire local pour la configuration virtuelle (conf.d ) et certificats SSL (ssl ).

Enfin, définissez mynet avec un pilote de pont et les registrydata avec un pilote local comme paramètres pour le réseau personnalisé.

Étape 3 :Configurer le transfert de port Nginx

L'étape suivante consiste à configurer un hôte virtuel Nginx et à le configurer pour le service Nginx.

1. Déplacez-vous vers nginx/conf.d/ répertoire que vous avez créé à l'étape précédente :

cd nginx/conf.d/

2. Créez un nouveau fichier d'hôte virtuel nommé registry.conf :

nano registry.conf

3. Ajoutez le contenu suivant :

upstream docker-registry {
    server registry:5000;
}

server {
    listen 80;
    server_name registry.example-server.com;
    return 301 https://registry.example-server.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name registry.example-server.com;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    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://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;
    }

}

4. Enregistrez le fichier et revenez au shell du terminal.

Étape 4 :Augmenter la taille de téléchargement du fichier Nginx

Par défaut, Nginx limite la taille de téléchargement du fichier à 1 Mo . Comme de nombreuses images Docker dépassent ce nombre, la meilleure pratique consiste à augmenter la taille de fichier maximale sur Nginx. Assurez-vous que vous pouvez télécharger des images de plus grande taille en définissant le max_body_size à 2 Go .

1. Créez un fichier de configuration supplémentaire avec :

nano additional.conf

2. Ajoutez la ligne suivante dans le fichier :

client_max_body_size 2G;

3. Enregistrez et fermez le fichier.

Étape 5 :Configurer le certificat SSL et l'authentification de base

1. Les fichiers de certificats SSL de votre domaine doivent être copiés dans le ssl annuaire. Pour ce faire, exécutez les commandes :

cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/

2. Ensuite, passez à auth répertoire :

cd auth

3. Et demandez un nouveau fichier de mot de passe nommé registry.passwd pour votre utilisateur :

htpasswd -Bc registry.passwd example

4. Tapez un mot de passe fort et retapez-le pour confirmer. Avec cela, vous avez ajouté un mot de passe pour votre utilisateur.

Étape 6 :Ajoutez le certificat de l'autorité de certification racine

Vous devez maintenant ajouter le certificat Root CA à Docker et au système sur lequel vous travaillez.

1. Exportez le .crt fichier avec OpenSSL en tapant :

openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt

2. Copiez le certificat racine dans un nouveau répertoire pour les certificats Docker :

mkdir -p /etc/docker/certs.d/registry.example-server.com/
cp rootCA.crt /etc/docker/certs.d/example-server.com/

3. Ensuite, copiez le même certificat dans un autre nouveau répertoire sous le nom /usr/share/ca-certificate/extra :

mkdir -p .usr.share.ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/

4. Reconfigurez le ca-certificate nouvellement créé package en tapant :

dpkg-reconfigure ca-certificates

5. Enfin, redémarrez le service Docker :

systemctl restart docker

Étape 7 :Exécutez Docker Registry

Une fois que tout est configuré et prêt, vous pouvez créer le conteneur Docker Registry à l'aide de Docker-Compose :

docker-compose up -d

Vérifiez si le registre et les services Nginx sont en cours d'exécution :

docker-compose ps
netstat -plntu

La sortie devrait vous montrer les services et leurs ports assignés.

Extraire l'image de Docker Hub vers un registre privé

1. Pour stocker localement une image de Docker Hub dans votre registre privé, utilisez le docker pull commande :

docker pull [docker_image]

2. Ajoutez une balise à l'image pour l'étiqueter pour le registre privé :

docker image tag [docker_image] registry.example-server.com/[new_image_name]

3. Vous pouvez vérifier si l'image Docker est disponible localement en demandant au système de répertorier toutes les images stockées localement :

docker images

Comment transférer une image Docker vers un registre privé

1. Pour pousser une image d'un hôte Docker vers le serveur de registre privé Docker, vous devez d'abord vous connecter au registre avec la commande :

docker login https://registry.example-server.com/v2/

2. Saisissez le nom d'utilisateur et mot de passe que vous avez défini pour l'hôte virtuel.

3. Vous pouvez maintenant pousser votre image vers le registre privé avec la commande :

docker push registry.example-server.com/[new_image_name]

4. Voir une liste d'images stockées dans le registre privé Docker :

http -a example https://registry.example-server.com/v2/_catalog

Ubuntu
  1. Comment définir la mémoire Docker et la limite d'utilisation du processeur

  2. Volumes Docker NFS :comment créer et utiliser

  3. Comment installer et utiliser Docker sur Ubuntu 20.04

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

  5. Comment installer et utiliser Docker dans Ubuntu 20.04

Comment configurer le registre Docker privé sur Ubuntu 20.04

Comment installer et configurer Docker sur Ubuntu 18.04

Comment configurer le registre Docker privé sur Ubuntu 18.04 LTS

Comment installer et utiliser Docker Compose sur Ubuntu 20.04

Comment installer et utiliser Docker sur Ubuntu 22.04

Comment installer et utiliser Docker sur AlmaLinux 8