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.
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
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)"
Lancer le conteneur du registry qui sera exposé sur le port 5000 :
docker-compose up -d
Se connecter sur
harbor.cyberwatch.fr
avec les identifiants fournis :docker login harbor.cyberwatch.fr
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
Exécuter le script :
bash pull_push_images.sh
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.
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"
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"] }
Relancer docker :
sudo systemctl restart docker
Redémarrer Cyberwatch :
sudo cyberwatch restart