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. 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=("mariadb:stable" "redis" "nginx" "third_parties" "olympe:stable" "repos" "elasticsearch-oss" "kibana-oss" "heimdall")
    for image in \${images[*]}
    do
      docker pull "\$cyberwatch_registry/\$image"
      docker tag "\$cyberwatch_registry/\$image" "\$local_registry/\$image"
      docker push "\$local_registry/\$image"
    done
    EOF
    
  5. Exécuter le script :

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

    localhost:5000/third_parties                                     latest    8a46b44fc8ee   12 hours ago        883MB
    localhost:5000/redis                                             latest    bcb761891a54   7 days ago          117MB
    localhost:5000/nginx                                             latest    5c5f7451c390   7 days ago          144MB
    localhost:5000/mariadb                                           stable    e33bfe8524dc   7 days ago          400MB
    localhost:5000/heimdall                                          latest    41947ac9b07c   2 weeks ago         630MB
    localhost:5000/elasticsearch-oss                                 latest    002a4935f8f3   2 weeks ago         1.29GB
    localhost:5000/kibana-oss                                        latest    4d3a08e3a3b4   2 weeks ago         711MB
    localhost:5000/olympe                                            stable    adcd05e87338   2 weeks ago         859MB
    localhost:5000/repos                                             latest    91bc4f226f1c   3 months ago        41.8MB
    

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