Installer un registre d’images Docker

Déployer un registre hébergeant des images Docker permet de s’affranchir de la connexion nécessaire entre le serveur Cyberwatch et le registre d’images harbor.cyberwatch.fr hébergé et disponible en ligne.

Cela peut également permettre de gérer plus finement les mises à jour des images qui seront déployées sur le serveur Cyberwatch pour les mises à jour du logiciel.

Plusieurs méthodes permettent d’obtenir un registre d’images Docker fonctionnel. Deux d’entre elles sont décrites dans la documentation ci-dessous.

La première consiste à déployer un registre Harbor, la seconde à déployer un registre d’images Docker local.

L’avantage d’Harbor est qu’il offre une interface graphique permettant de gérer la réplication des images et de nombreuses autres fonctionnalités non proposées par la mise en place d’un registre Docker local.

Déploiement d’un registre Harbor (recommandé)

Le déploiement d’un registre Harbor se base sur les étapes de la documentation officielle d’Harbor

Une fois le déploiement d’Harbor terminé, des règles de réplication des images Docker depuis le registre harbor.cyberwatch.fr pourront être mises en place.

Se référer à la documentation Harbor pour mettre en place ces éléments.

Une fois le tout mis en place, configurez vos nœuds Cyberwatch pour télécharger depuis le nouveau registre déployé.

Mise en place d’un registre docker local (ancienne méthode)

Prérequis : docker compose est nécessaire afin de permettre un suivi du téléchargement des images Docker.

  1. Créer le fichier docker-compose.yml :

    cat <<EOF > docker-compose.yml
    version: "3.3"
    services:
      registry:
        restart: always
        image: registry:2
        ports:
          - 5000:5000
        environment:
          - REGISTRY_HTTP_ADDR=0.0.0.0:5000
          - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt
          - REGISTRY_HTTP_TLS_KEY=/certs/domain.key
        volumes:
          - "./docker_registry_certs:/certs"
    EOF
    
  2. Exécuter la commande suivante :

    mkdir docker_registry_certs
    openssl req \
      -newkey rsa:4096 -nodes -sha256 -keyout docker_registry_certs/domain.key \
      -x509 -days 730 -out docker_registry_certs/domain.crt \
      -subj "/C=FR/ST=France/L=Paris/O=Cyberwatch/CN=$(hostname)"
    
  3. Lancer le conteneur du registry qui sera exposé sur le port 5000 :

    docker-compose up -d
    
  4. Se connecter sur harbor.cyberwatch.fr avec les identifiants fournis :

    docker login harbor.cyberwatch.fr
    
  5. Créer le script permettant de pull les images depuis le registre harbor.cyberwatch.fr et de les push sur le registry local à l’aide de la commande suivante :

    cat <<EOF > pull_push_images.sh
    #!/bin/bash
    set -e
    cyberwatch_registry="harbor.cyberwatch.fr/cbw-on-premise"
    local_registry="localhost:5000"
    images=("redis" "nginx" "olympe" "heimdall")
    for image in "${images[@]}"
    do
       echo "Pulling $cyberwatch_registry/$image ..."
       docker pull "$cyberwatch_registry/$image"
       echo "Tagging $cyberwatch_registry/$image to $local_registry/$image ..."
       docker tag "$cyberwatch_registry/$image" "$local_registry/$image"
       echo "Pushing $local_registry/$image ..."
       docker push "$local_registry/$image"
    done
    EOF
    
  6. Exécuter le script :

    bash pull_push_images.sh
    
  7. Vérifier la présence des images sur le registre local. Vous devriez obtenir un résultat similaire à la liste ci-dessous :

    localhost:5000/redis                                             latest    bcb761891a54   7 days ago          117MB
    localhost:5000/nginx                                             latest    5c5f7451c390   7 days ago          144MB
    localhost:5000/heimdall                                          latest    41947ac9b07c   2 weeks ago         630MB
    localhost:5000/olympe                                            latest    adcd05e87338   2 weeks ago         859MB
    

Configuration d’un nœud Cyberwatch pour la récupération des images sur le registre mis en place

Une fois le registre d’images mis en place, il est nécessaire de configurer les nœuds Cyberwatch de sorte à ce qu’ils téléchargent leurs images depuis le nouveau registre.

  1. Modifier la variable CBW_CONTAINER_REGISTRY contenue dans le fichier /etc/cyberwatch/config.env afin de définir l’URL du nouveau registre :

    CBW_CONTAINER_REGISTRY="IP_REGISTRY:REGISTRY_PORT"
    
  2. Optionnel si votre registre ne dispose pas d’un certificat HTTPS valide, il sera nécessaire d’autoriser l’URL du serveur comme insecure registry dans le fichier /etc/docker/daemon.json :

    {
      "insecure-registries" : ["IP_REGISTRY:REGISTRY_PORT"]
    }
    
  3. Relancer docker :

    sudo systemctl restart docker
    
  4. Redémarrer Cyberwatch :

    sudo cyberwatch restart
    

Retour en haut