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 URL | https://reg.in.cristal.fr |
| Authentification | LDAP (identifiants CRIStAL habituels) |
| Demande d’accès | Envoyer 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 :
-
pit/— images maintenues par le PIT (outils d’infrastructure) -
bioinfo/— images des équipes de bioinformatique -
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 quelatest. Ç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.