Les registres et les images

Faire une recherche sur le registre

Dans le TP précédent nous avons créé manuellement une image nginx. Il s'avère qu'une image officielle existe déjà, il suffit de la lancer avec docker run nginx.

Cependant, comment savoir que cette image existe ? Et comment fonctionne-t-elle ?

$ docker search nginx --limit 10
NAME                                     DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                    Official build of Nginx.                        9699                [OK]                
jwilder/nginx-proxy                      Automated Nginx reverse proxy for docker con…   1417                                    [OK]
richarvey/nginx-php-fpm                  Container running Nginx + PHP-FPM capable of…   615                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion   LetsEncrypt container to use with nginx as p…   417                                     [OK]
kong                                     Open-source Microservice & API Management la…   228                 [OK]                
webdevops/php-nginx                      Nginx with PHP-FPM                              113                                     [OK]
zabbix/zabbix-web-nginx-mysql            Zabbix frontend based on Nginx web-server wi…   68                                      [OK]
bitnami/nginx                            Bitnami nginx Docker Image                      58                                      [OK]
tobi312/rpi-nginx                        NGINX on Raspberry Pi / armhf                   20                                      [OK]
wodby/drupal-nginx                       Nginx for Drupal container image                10                                      [OK]

Description des options :

  • search indique au cli docker de faire une recherche sur docker hub
  • nginx est le nom recherché
  • --limit n permet de limiter le nombre de résultats à n

Description du résultat : - Name le nom de l'image - Description la description de l'image - Stars le nombre de fois que l'image a été mise en favoris - Official est-ce une image officielle docker - Automated l'image est-elle issue d'un build automatisé (CI/CD)

search présente toutefois un inconvéniant majeur, elle ne permet pas d'obtenir la documentation de l'image comme on peut la consulter sur docker hub, par exemple : Image officielle bash.

Télécharger une image sans l'exécuter

Lorsque l'image n'est pas présente en local, docker run la télécharge. Il est toutefois possible de la télécharger sans l'exécuter :

$ docker pull node
Using default tag: latest
latest: Pulling from library/node
f189db1b88b3: Already exists 
3d06cf2f1b5e: Already exists 
687ebdda822c: Already exists 
99119ca3f34e: Already exists 
e771d6006054: Already exists 
b0cc28d0be2c: Already exists 
ee69cdbe70ee: Pulling fs layer
[...]

Les tags

Par défaut, lorsque docker télécharge une image, il la télécharge dans sa dernière version latest, toutefois, on peut préciser une version donnée :

8: Pulling from library/node
f189db1b88b3: Already exists 
3d06cf2f1b5e: Already exists 
687ebdda822c: Already exists 
99119ca3f34e: Already exists 
e771d6006054: Already exists 
b0cc28d0be2c: Already exists 
7225c154ac40: Pull complete 
7659da3c5093: Pull complete 
Digest: sha256:d97f5bf54e016ad55dd0475f8710b99be14884ab1afcae8875f8092341264b0c
Status: Downloaded newer image for node:8

Lister les images disponibles

Afin d'identifier les images présentes en local, on peut utiliser la commande images

$ docker images
REPOSITORY                                                     TAG                                        IMAGE ID            CREATED             SIZE
node                                                           latest                                     8672b25e842c        4 days ago          674MB
node                                                           8                                          6f62c0cdc461        13 days ago         670MB
ubuntu                                                         latest                                     cd6d8154f1e1        2 weeks ago         84.1MB
nginx                                                          1.11-alpine                                bedece1f06cc        17 months ago       54.3MB

On voit dans le résultat de cette commande l'ensemble des images téléchargées, avec leur nom, leur version, leur id et leur taille occupée sur disque.

S'identifier auprès d'un registry privé ou public

Dans le cas d'un registre privé, on souhaite s'authentifier pour récupérer les droits d'accès que l'on a. C'est à ce moment que l'on utilise la commande login.

Puis utiliser la commande login :

$ docker login -u <login> https://registry-1.docker.io/
Password: 
Login Succeeded

Construire une image à partir d'un Dockerfile

Image nginx fait-maison

Les opérations manuelles effectuées dans le TP précédent sont laborieuses et non automatisées.

Les Dockerfile vont nous permettre de décrire des recette de création d'images, afin de rendre l'opération répétable.

Nous allons recréer notre image nginx en utilisant un Dockerfile. Ce TP sera moins guidé que le précédent.

Les commandes du Dockerfile

Pour rappel, les commandes principales des Dockerfiles sont les suivantes.

FROM
RUN
ENTRYPOINT
CMD
EXPOSE
COPY
ADD
WORKDIR
USER

Structure de base de notre Dockerfile

FROM ubuntu

# installer nginx
RUN ...

# ajouter la directive daemon off;
RUN ... 
# ou COPY ...

# ajouter notre page web dans le répertoire servi par nginx
COPY ...

# définir le répertoire de base de l'image
WORKDIR ...

# lancer nginx au démarrage
ENTRYPOINT ...

# exposer le port web
EXPOSE ...

Créer un alias curl pour PowerShell

Un équivalent de curl manque cruellement à PowerShell, nous allons le créer nous-même :

  • Écrire un Dockerfile pour créer une image contenant curl
  • Les conteneurs résultant de l'image doivent exécuter curl --help lorsqu'ils se lancent
  • L'option --help doit pouvoir être surchargée par l'appel à docker run ...

Une fois l'image prête, créer l'alias (une fonction) dans PowerShell :

function mycurl {docker run my-curl $args}