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 :
searchindique au cli docker de faire une recherche sur docker hubnginxest le nom recherché--limit npermet 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 --helplorsqu'ils se lancent - L'option
--helpdoit 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}