Configurer un registre Docker privé – Part I

Docker_logo

  • Qu’est ce que Docker ?

Docker est une plateforme open-source pour les administrateurs système et les développeurs. Il permet de structurer et de faire fonctionner vos projets dans un environnement virtualisé et isolé appelé Container. Docker s’appuie sur le système d’exploitation sur lequel il repose et n’embarque donc pas la partie système ni le noyaux à la différence d’une VM. Ceci le rend plus léger et également « transportable » sur un autre OS.

Screen Shot 2014-11-08 at 22.40.29 Screen Shot 2014-11-08 at 22.40.22

          Docker                                                 Machines Virtuelles

Source : docker.com

Pour en savoir plus je vous recommande de parcourir la documentations très bien faite le site de projet docker.com. Voici également un lien vers un article du blog d’it-connect.fr pour débuter avec les containers.

    • Registre

Docker repose sur un système de template permettant de déployer rapidement vos applications. Une communauté participe à l’élaboration de ces modèles. Le site vous permet également de vous inscrire, de stocker et de publier vos projets de façon gratuite. Néanmoins si certains de vos projet doivent rester privé. Nous allons donc voir comments configurer une machine sous Ubuntu 14.04 en tant que registre privé Docker.

      •  Installation

Première étape, il est nécessaire d’installer quelques pré-requis :

sudo apt-get -y install build-essential python-dev libevent-dev python-pip liblzma-dev

 

Ensuite, utilisez pip pour installer la dernière version du registre Docker.

sudo pip install docker-registry

 

      •  Configuration

Changez de dossier :

cd /usr/local/lib/python2.7/dist-packages/docker_registry/lib/../../config

 

Puis servez-vous du fichier config_sample.yml comme base de configuration en le copiant :

sudo cp config_sample.yml config.yml

 

Dans un environnement de test vous pouvez laisser le fichier dans l’état. N’hésitez à y aller faire un tour !

Maintenant vous pouvez tester votre serveur :

gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application

 

Si la sortie ressemble à ceci :


2014-11-07 21:40:19 [24559] [INFO] Starting gunicorn 19.1.0
2014-11-07 21:40:19 [24559] [INFO] Listening at: http://127.0.0.1:5000 (24559)
2014-11-07 21:40:19 [24559] [INFO] Using worker: gevent
2014-11-07 21:40:19 [24565] [INFO] Booting worker with pid: 24565

C’est bon votre registre fonctionne ! Vous pouvez tuez le process avec Ctrl + C.

Créez ensuite un répertoire de log pour votre registre :

sudo mkdir -p /var/log/registre-docker

 

Créez également un fichier de démarrage :

sudo nano /etc/init/registre-docker.conf

 

Et ajoutez dedans :


description "Registre Docker"

start on runlevel [2345]
stop on runlevel [016]

respawn
respawn limit 10 5

script
exec gunicorn --access-logfile /var/log/registre-docker/access.log --error-logfile /var/log/registre-docker/server.log -k gevent --max-requests 100 --graceful-timeout 3600 -t 3600 -b localhost:5000 -w 8 docker_registry.wsgi:application
end script

 

Ensuite, démarrer le service :

sudo service registre-docker start

 

      • Sécurité

Installez Nginx et apache2-utils pour faciliter la création d’un fichier d’authentification et sa lecture :

sudo apt-get -y install nginx apache2-utils

 

Créez un utilisateur (si vous ajouter un second utilisateur, enlevez l’option -c):

sudo htpasswd -c /etc/nginx/registre-docker.htpasswd nom_utilisateur

 

Créez votre nouveau fichier de site :

sudo nano /etc/nginx/sites-available/registre-docker

 

Et copiez cette configuration :


upstream registre-docker {
 server localhost:5000;
}

server {
 listen 8080;
 server_name mon.registre.docker.com;

 ssl on;
 ssl_certificate /etc/ssl/certs/registre-docker;
 ssl_certificate_key /etc/ssl/private/registre-docker;

 proxy_set_header Host       $http_host;
 proxy_set_header X-Real-IP  $remote_addr;

 client_max_body_size 0;

 chunked_transfer_encoding on;

 location / {
     auth_basic              "Restricted";
     auth_basic_user_file    registre-docker.htpasswd;

     proxy_pass http://registre-docker;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://registre-docker;
 }  
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://registre-docker;
 }
}

 

Les paramètres SSL dans la configuration sont activés. Il nous faut donc créer des certificats auto-signés.
Commencez par créer les dossiers :


mkdir ~/certs
cd ~/certs

 

En premier générez une clé racine :

openssl genrsa -out dockerCA.key 2048

 

Puis générez un certificat racine :

openssl req -x509 -new -nodes -key dockerCA.key -days 10000 -out dockerCA.crt

Entrez les réponses que vous voulez.

Créez la clé pour votre serveur :

openssl genrsa -out registre-docker.com.key 2048

 

Faite une demande de certificat signé :

openssl req -new -key registre-docker.com.key -out registre-docker.com.csr

 

Attention : pour « CommonName » entrez le domaine du serveur !
N’entrez pas non plus de « Challenge password » .

Pour finir, signez votre certificat et copiez les fichiers aux endroits indiqués plus haut dans la configuration du site sur Nginx.:


openssl x509 -req -in registre-docker.com.csr -CA dockerCA.crt -CAkey dockerCA.key -CAcreateserial -out registre-docker.com.crt -days 10000

sudo cp registre-docker.com.crt /etc/ssl/certs/registre-docker

sudo cp registre-docker.com.key /etc/ssl/private/registre-docker

 

Le certificat étant auto-signé, exécutez la commande suivante :


sudo mkdir /usr/local/share/ca-certificates/cert-docker

sudo cp dockerCA.crt /usr/local/share/ca-certificates/cert-docker

sudo update-ca-certificates

 

      • Mise en route

Activer le site et redémarrez le serveur Nginx :

sudo ln -s /etc/nginx/sites-available/registre-docker /etc/nginx/sites-enabled/registre-docker


sudo service Nginx restart

 

Vous pouvez tester le serveur web avec le login et le mot de passe créé précédemment:

curl https://login:mot_de_passe@localhost:8080

 

Vous pouvez également tester votre serveur depuis un navigateur une machine distante et essayez de vous connecter.

Si vous voyez

"\"docker-registry server\""

alors votre serveur est fonctionnel.
Dans la partie 2 nous verrons comment se connecter sur votre serveur avec une machine distante.

2 réponses à “Configurer un registre Docker privé – Part I”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.