Table of Contents

Docker: Créer un registre auto hébergé

Installation du registre (sur un serveur ou localement)

Docker Registry est une application Python, son installation est simple:

git clone https://github.com/dotcloud/docker-registry.git
cd docker-registry
cp config_sample.yml config.yml
pip install -r requirements.txt
gunicorn --access-logfile - --log-level debug --debug
    -b 0.0.0.0:5000 -w 1 wsgi:application

Le registre exécute maintenant localhost (port 5000) dans une version de développement et utilise un stockage local. Évidemment, dans un environnement de production, on peut exécuter le registre sur le port 443 (ou 80 sur un réseau local) et le rendre accessible avec un nom d’hôte0

utilisation de push et pull

La méthode par défaut consistant à extraire des référentiels du registre central n'a pas changé:

Extraire l'image de base d'ubuntu:
docker pull ubuntu
Pousser l'image Hipache
docker push samalba/hipache

Implicitement, cela pousse et extrait chaque accès au registre central à index.docker.io, donc rien n’a changé avec le comportement par défaut et tous les exemples fonctionnent toujours.

Utilisation du registre local

Pour extraire ou pousser dans le registre local, il suffit d'ajouter l'emplacement du registre au nom du référentiel. Cela ressemblera à mon.registry.address:port/repository_name.

Par exemple pour pousser le référentiel “ubuntu” sur le registre local, qui s'exécute sur la machine locale, sur le port 5000:

# Tout d’abord, s'assurer qu'on a le référentiel "ubuntu":
docker pull ubuntu

# Ensuite, trouver l'image du référentiel Ubuntu
docker images | grep ubuntu | grep latest
ubuntu  latest  8dbd9e392a96  12 weeks ago  263 MB (virtual 263 MB)

# Tagger pour créer un référentiel avec l'emplacement complet du registre.
# L'emplacement devient une partie permanente du nom du référentiel.
docker tag 8dbd9e392a96 localhost.localdomain:5000/ubuntu

# Enfin, pousser le nouveau référentiel sur son emplacement d'origine.
docker push localhost.localdomain:5000/ubuntu

Oon utilise un domaine contenant un “.” Ici, c.-à-d. localhost.domain. Docker recherche un “.” (Séparateur de domaine) ou un “:” (séparateur de port) pour apprendre que la première partie du nom du référentiel est un emplacement et non un nom d'utilisateur. Si on indique localhost sans .localdomain ou: 5000, alors Docker croira que localhost est un nom d'utilisateur, comme dans localhost/ubuntu. Il essaiera alors de pousser vers le registre central par défaut. Docker qui contient un nom d’hôte et qui devrait plutôt être envoyé à l’emplacement spécifié.