Gitlab comme registre de conteneurs Docker

Gitlab fait partie des logiciels d’hébergement git de référence pour garder une maîtrise du versionning des projets en interne.

Nous allons voir dans cet article comment rajouter à votre Gitlab la fonction registre Docker qui permet de stocker vos images locales dans vos projets git sur la même plateforme.

Prérequis

Une installation de gitlab fonctionnelle, on conseille la version Omnibus permettant d’avoir une installation fonctionnelle rapidement.

Un fonctionnement en https.

Un certificat et un vhost dédié, le registre sera accessible sur une autre url que celle de gitlab. Dans notre exemple :
https://gitlab.guidtz.org : le gitlab
https://registre.guidtz.org : le registre

Configuration

Activer le registre dans le fichier /etc/gitlab/gitlab.rb

registry_external_url 'https://registre.guidtz.org'

Faire en sorte que ce soit à l’utilisateur du projet d’activer ou non le registre, cela évite de mettre en place du registre pour tout les projets, attention valable uniquement pour les nouveaux projets :

gitlab_rails['gitlab_default_projects_features_container_registry'] = false

Si besoins, changer le chemin de stockage des images :

gitlab_rails['registry_path'] = "/path/to/registry/storage"

Attention, ce répertoire doit être accessible par l’utilisateur faisant tourner gitlab et par apache.

Reconfigurer gitlab :

gitlab-ctl reconfigure

Vhost Apache

Créer un vhost Apache identique à celui de gitlab avec le certificat SSL correspondant.

Juste changer le proxy vers le port 5000 et non pas 8181

<VirtualHost *:80>
ServerName registre.guidtz.org
Redirect Permanent / https://registre.guidtz.org
</VirtualHost>
<VirtualHost *:443>
ServerName registre.guidtz.org

LogLevel warn
ErrorLog "|/usr/bin/rotatelogs -lc /var/www/registre.guidtz.local/var/log/apache2/error.%Y.%m.%d 86400"
CustomLog "|/usr/bin/rotatelogs -lc /var/www/registre.guidtz.local/var/log/apache2/access.%Y.%m.%d 86400" combined

SSLEngine on
SSLCertificateFile      /etc/letsencrypt/live/registre.guidtz.org/fullchain.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/registre.guidtz.org/privkey.pem

# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000"

# Activate http/2
Protocols h2 h2c http/1.1

H2Push          on
H2PushPriority  *                       after
H2PushPriority  text/css                before
H2PushPriority  image/jpeg              after   32
H2PushPriority  image/png               after   32
H2PushPriority  application/javascript  interleaved

RequestHeader set Host "registre.guidtz.org"
RequestHeader add X-Forwarded-Ssl on
RequestHeader set X-Forwarded-Proto "https"

ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/


</VirtualHost>
# intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv3
SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder     on
SSLCompression          off
SSLSessionTickets       off

# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling          off
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache        shmcb:/var/run/ocsp(128000)

Activer le registre sur un projet

Dans Settings / General / Permissions :

Utiliser le registre

Se connecter au registre :

# docker login registre.guidtz.org

Construire une image pour ce registre :

# docker build -t registre.guidtz.org/mesprojets/myapp:0.1 .

Pousser une image :

# docker push registre.guidtz.org/mesprojets/myapp:0.1

Ce qui donne ceci sur gitlab :

Récupérer l’image :

# docker image pull registre.guidtz.org/mesprojets/myapp:0.1

A suivre

Votre Gitlab est maintenant transformé en registre Docker.

Dans un prochain article, nous verrons comment automatiser la création de l’image et la stocker sur le registre en même temps.

 

Leave a Comment

Your email address will not be published.