Registre privé d’images (Harbor)

Présentation

Harbor est un registre privé d’images de conteneurs (OCI, Docker, Podman) hébergé au CRIStAL et administré par le PIT.

Il permet aux équipes de recherche et aux plateformes technologiques de l’unité de stocker, distribuer et sécuriser leurs images de conteneurs sans dépendre de registres publics comme Docker Hub, GitHub Container Registry ou Google Container Registry.

Adresse URLhttps://reg.in.cristal.fr
AuthentificationLDAP (identifiants CRIStAL habituels)
Demande d’accèsEnvoyer un mail au PIT : cristal-adminsys@univ-lille.fr

Note : L’outil n’est pas accessible en dehors du réseau de l’Université de Lille. Pour l’utiliser depuis un autre endroit, il faudra utiliser le VPN de l’Université de Lille par exemple.

À quoi ça sert ?

Stocker vos images de conteneurs

Si vous développez des logiciels, des outils de recherche ou des environnements de calcul sous forme de conteneurs Docker, Harbor vous offre un espace privé pour les héberger. Plus besoin de pousser vos images sur Docker Hub (public, limité en pulls, et hébergé aux États-Unis) ou de les laisser traîner sur des machines locales.

Garantir la sécurité de vos images

Harbor intègre un scanner de vulnérabilités qui analyse automatiquement chaque image poussée sur le registre. Vous êtes alerté si une de vos images contient des dépendances présentant des failles de sécurité connues (CVE). Dans le contexte ZRR du laboratoire, c’est un élément important de la chaîne de confiance.

Signer vos images

Harbor supporte la signature d’images via Cosign. Une image signée garantit son intégrité et son origine : vous avez la certitude que l’image que vous tirez du registre est bien celle qui a été poussée, sans altération.

Servir de miroir pour les images publiques

Plutôt que de télécharger des images depuis Docker Hub à chaque build (avec les limites de débit et les risques de supply chain), Harbor peut être utilisé comme un "proxy-cache". Les images publiques sont téléchargées une fois, stockées localement, et redistribuées au CRIStAL sans accès Internet.

Qui est concerné ?

Harbor s’adresse à toute personne au laboratoire qui utilise des conteneurs dans son travail :

  • Les chercheurs, enseignants-chercheurs et doctorants qui empaquettent leurs outils de recherche, leurs pipelines de traitement de données ou leurs environnements de calcul dans des conteneurs type Docker.
  • Ingénieurs qui développent des applications web, des API ou des services déployés en conteneurs.

Comment y accéder ?

Via votre navigateur

Rendez-vous sur https://reg.in.cristal.fr et connectez-vous avec votre compte CRIStAL. Vous accédez à l’interface web qui vous permet de parcourir les projets, consulter les images disponibles, vérifier les résultats des scans de vulnérabilités et gérer vos dépôts.

Via la ligne de commande (Docker / Podman)

# Se connecter au registre
docker login reg.in.cristal.fr

# Taguer une image locale pour Harbor
docker tag mon-image:latest reg.in.cristal.fr/mon-projet/mon-image:latest

# Pousser l'image
docker push reg.in.cristal.fr/mon-projet/mon-image:latest

# Tirer une image
docker pull reg.in.cristal.fr/mon-projet/mon-image:latest

Les mêmes commandes fonctionnent avec Podman (remplacez docker par podman).

Dans vos pipelines GitLab CI/CD

Harbor s’intègre nativement avec le GitLab du laboratoire. Vos pipelines CI/CD peuvent construire et pousser automatiquement des images vers Harbor à chaque commit ou release. Vous pouvez créer un compte robot (service account) dédié à votre projet pour ne pas exposer vos identifiants personnels dans les pipelines.

Exemple de pipeline de CI/CD pour un projet Gitlab qui contient uniquement un fichier Dockerfile :

default:
  tags:
    - pit

stages:
  - build
  - sign

variables:
  IMAGE: $HARBOR_REGISTRY/$HARBOR_PROJECT/app
  CACHE_IMAGE: $HARBOR_REGISTRY/$HARBOR_PROJECT/app:cache

# job de build (avec BuildKit, rootless)
build:
  stage: build
  image:
    name: moby/buildkit:rootless
    entrypoint: [""]
  script:
    # Auth Harbor
    - mkdir -p ~/.docker
    - |
      cat > ~/.docker/config.json <<EOF
      {
        "auths": {
          "$HARBOR_REGISTRY": {
            "username": "$HARBOR_USER",
            "password": "$HARBOR_PASSWORD"
          }
        }
      }
      EOF

    # Build + push + cache
    - |
      buildctl-daemonless.sh build \
        --frontend dockerfile.v0 \
        --local context=. \
        --local dockerfile=. \
        --output type=image,name=$IMAGE:$CI_COMMIT_SHA,push=true \
        --export-cache type=registry,ref=$CACHE_IMAGE,mode=max \
        --import-cache type=registry,ref=$CACHE_IMAGE


# job de signature de l'image
sign:
  stage: sign
  image: alpine:3.23
  before_script:
    - apk add --no-cache cosign
  script:
    - cosign version
    - |
      if [ -n "$COSIGN_KEY" ]; then
        echo "$COSIGN_KEY" > cosign.key
        chmod 600 cosign.key
        cosign sign --key cosign.key --yes $IMAGE:$CI_COMMIT_SHA
      else
        echo "Pas de clef cosign key fournie → pas de signature de l'image ..."
      fi

Organisation des projets

Harbor est organisé en projets. Chaque projet regroupe un ensemble d’images liées à une équipe, un outil ou une thématique. Par exemple :

  1. pit/ — images maintenues par le PIT (outils d’infrastructure)
  2. bioinfo/ — images des équipes de bioinformatique
  3. votre-equipe/ — un projet dédié à votre équipe de recherche

Pour demander la création d’un projet, contactez le PIT. Vous serez désigné comme mainteneur du projet et pourrez y inviter vos collègues.

Bonnes pratiques

  • Taguez vos images avec des versions explicites (v1.2.3, 2025.03) plutôt que de n’utiliser que latest. Ça garantit la reproductibilité de vos expériences.
  • Consultez les rapports de scan avant de déployer une image en production ou de la partager avec des collaborateurs extérieurs.
  • Ne stockez pas de secrets dans vos images (mots de passe, clés API, tokens). Utilisez des variables d’environnement ou un outil comme Vault.
  • Nettoyez vos anciennes images régulièrement. Harbor propose des politiques de rétention automatiques — le PIT peut les configurer pour votre projet.

Connectez-vous

avec votre identifiant CRIStAL
Mot de passe oublié?
Demander un compte