Registre Docker pour stocker les images

À partir d’un Dockerfile, on peut construire une image. L’intérêt d’une image est d’être ré-utilisable.

Question:

Comment permettre à d’autres personnes de ré-utiliser mon image ?

La première solution sans doute la plus simple consiste à mettre le Dockerfile sur les machines qui nous intéressent et à construire cette image localement à l’aide de la commande :

$ docker build -t mon_image .

Similairement, je peux partager mon Dockerfile avec d’autres personnes, et les laisser la construire.

Cette solution fonctionne, mais présente plusieurs problèmes :

  • Un Dockerfile n’assure pas forcément un build reproductible : à partir du même Dockerfile, on pourra obtenir deux images différentes dans le temps
  • Construire une image peut être long (téléchargement de paquets, compilation…) : c’est très consommateur de ressource.

Une solution idéale serait de pouvoir partager directement ses images, une fois construites.

C’est ce que propose le Docker Hub : un espace où n’importe peut téléverser ses images et télécharger les images des autres. Ainsi, à chaque utilisation de l’image, il n’y a qu’à la télécharger, et on a l’assurance que ça sera la même image partout où on la télécharge.

À chaque modification du Dockerfile, il n’y a besoin de reconstruire l’image qu’une seule fois puis de la tirer partout où c’est nécessaire.

Cette solution fonctionne bien, mais impose d’exposer publiquement ses images sur le Hub.

Important:

Il y a d’autres problèmes plus importants. Le Docker Hub est complètement centralisé, ce qui nous rend dépendant à une entité qu’on ne maîtrise pas et qui change régulièrement ses conditions générales d’utilisation (en particulier autour de la période de rétention des images). Le jour où Docker décide par exemple de faire payer son service, nous ne pourrons pas nous y opposer.

La solution retenue consiste à utiliser un registre privé pour stocker nos images. En opposition, le Docker Hub est un registre public.

Note:

Un registre Docker est simplement un logiciel qui permet de téléverser et de télécharger des images Docker.

Ainsi, on est pas obligé de reconstruire les images chaque fois que l’on veut les utiliser, on peut les partager avec qui on veut, et on maîtrise l’infrastructure de bout en bout.

Lien:

Notre registre privé est déployé avec les fichiers présents sur le dépôt registry (voir gestion des services).

On peut alors pousser des images sur le registre comme suit :

# Exemple de construction d'image
$ docker build -t monimage .
$ docker tag monimage registry.picasoft.net/monimage:v1
# Pourrait être
$ docker-compose build
# Pousser l'image sur le registre privé
$ docker push registry.picasoft.net/monimage:v1

Sur une autre machine, la récupération de l’image est symétrique :

$ docker pull registry.picasoft.net/monimage:v1

<bootnote warning>Sur les client, il faut au préalable se connecter au registre de production. Les identifiants sont les mêmes que sur les machines, le wiki, le Cloud…

$ docker login registry.picasoft.net
Username: <ton login>
Password:
Login Succeeded
  • technique/docker/general/mise_en_place_d_un_registry_docker.txt
  • de ppom