Docker - Création d'un registre privé avec Docker-Registry

Registre privé Docker-Registry

Présentation de Harbor

Harbor est un serveur de registre Docker destiné aux entreprises pour le stockage et la distribution d'images.

Fonctionnalités clés de Harbor :

Contrôle d'accès basé sur les rôles : Organisation des utilisateurs et des dépôts d'images via des projets, avec gestion fine des permissions.

  • Réplication des images : Synchronisation entre plusieurs instances de registre, idéal pour les architectures HA, hybrides ou multi-cloud.
  • Interface graphique : Gestion des projets et dépôts via navigateur.
  • Intégration LDAP/AD : Authentification centralisée avec audit complet.
  • Internationalisation : Disponible en anglais, chinois, allemand, japonais et russe.
  • API RESTful : Intégration simplifiée avec d'autres outils.

Déploiement d'un registre privé avec Harbor

Architecture

Principe : Configuration maître-esclave pour assurer la haute disponibilité. L'utilisation d'un registre interne évite la saturation du bande passante externe lors de l'import/export massif d'images.

Création d'une image

  1. Étiqeutage
  2. Envoi via docker push

Démarrage du registre

docker run -d -p 5000:5000 --restart=always --name registry -v /data/registry:/var/lib/registry registry

Étiquetage d'images

docker tag nginx:latest 192.168.1.100:5000/mon-nginx:latest
docker tag centos7_nginx:v2 192.168.1.100:5000/centos7-nginx:v2

Attention :

Par défaut, HTTPS est requis. Pour utiliser HTTP, modifier la configuration Docker :

cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["192.168.1.100:5000"]
}
EOF
systemctl restart docker


Envoi des images

docker push 192.168.1.100:5000/mon-nginx:latest

Configuration du miroir

vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["192.168.1.100:5000"]
}
systemctl restart docker

docker push 192.168.1.100:5000/mon-nginx:latest
docker push 192.168.1.100:5000/centos7-nginx:v2

Gestion du registre privé

Liste des images : http://192.168.1.100:5000/v2/_catalog

Versions disponibles : http://192.168.1.100:5000/v2/alpine/tags/list

Récupération d'images

docker pull 192.168.1.100:5000/mon-nginx:latest
docker pull 192.168.1.100:5000/centos7-nginx:v2

Multi-nœuds :

docker swarm - Orchestration kubernetes - Orchestration

Environnement d'exécution : runc

Dépôt vers registre privé

Création d'un compte et validation email

docker tag centos7_nginx:v2 utilisateur/centos7-nginx:v2
docker login
user: 
passwd:
docker push utilisateur/centos7-nginx:v2
docker pull utilisateur/centos7-nginx:v2

Suppression d'images

  1. Accès au conteneur
docker exec -it registry /bin/sh

  1. Suppression des données
rm -fr /var/lib/registry/docker/registry/v2/repositories/alpine

  1. Nettoyage
registry garbage-collect /etc/docker/registry/config.yml

Sécurité

  1. Génération du mot de passe
yum install httpd-tools -y
mkdir /auth/registry -p
htpasswd -Bbn utilisateur password > /auth/registry/htpasswd

  1. Démarrage sécurisé
docker rm -f $(docker ps -aq)
docker run -d -p 5000:5000 -v /auth/registry:/auth/ -v /data/registry:/var/lib/registry --name secure-registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Secure Registry" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 

  1. Authentification requise
docker login 192.168.1.100:5000
Username: utilisateur
Password: 

Registre d'entreprise Harbor

docker-compose

Téléchargement

wget http://192.168.15.253/harbor-offline-installer-v2.1.0.tgz

Décompression

tar xf harbor-offline-installer-v2.1.0.tgz

Dépendances :

  • docker-ce 17.06.0 +
  • docker-compose 1.18.0+
yum install docker-ce docker-compose -y

Configuration

cp /opt/harbor/harbor.yml.tmpl /opt/harbor/harbor.yml
vim /opt/harbor/harbor.yml
hostname: 192.168.1.11
...
harbor_admin_password: 123456

Installation

/root/harbor/install.sh

Gestion via docker-compose :

cd /opt/harbor
docker-compose stop
docker-compose start

Configuration finale :

cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries": ["192.168.1.11"]
}
EOF
systemctl restart docker

Connexion :

docker login 192.168.1.11

Étiquetage :

docker tag alpine:3.9 192.168.1.11/library/alpine:3.9

Envoi :

docker push 192.168.1.11/library/alpine:3.9

Configuration HTTPS

Préparation

mkdir cert
cd cert/
wget http://192.168.15.253/blog.example.com.zip
yum install docker-compose -y

Décompression

unzip blog.example.com.zip

Configuration

hostname: blog.example.com
certificate: /certs/nginx/1_blog.example.com_bundle.crt
private_key: /certs/nginx/2_blog.example.com.key

Pour les certificats auto-signés :

mkdir -p /etc/docker/certs.d

Optimisation :

sed -ni 's/docker load/#&/p' /root/harbor/install.sh

Exécution :

/root/harbor/install.sh

Désactivation HTTP :

cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
systemctl restart docker

Résolution DNS :

echo "192.168.1.11 blog.example.com" >> /etc/hosts

Connexion :

docker login blog.example.com

Échanges :

docker tag nginx:latest blog.example.com/library/nginx:latest
docker pull blog.example.com/library/alpine:3.9

Exemple Zabbix :

docker tag zabbix/zabbix-server-mysql:latest blog.example.com/zabbix/zabbix-server-mysql:latest
docker login blog.example.com
docker push blog.example.com/zabbix/zabbix-server-mysql:latest
docker pull blog.example.com/zabbix/zabbix-server-mysql:latest

Étiquettes: Docker Harbor registry conteneurisation Authentification

Publié le 27 septembre à 01h45