Dockerfile : un langage spécifique
Dockerfile : un langage spécifique
Objectifs pédagogiques
- Reconnaître les différentes étapes d'un Dockerfile
- Savoir utiliser la commande build
Analogie
Pour continuer sur notre analogie de la cuisine, le Dockerfile est une recette.
C'est une suite d'instructions qui permet d'obtenir un plat cuisiné.
On va travailler sur une recette très simple de Dockerfile, un Hello World.
Documentation
Il existe de nombreuses instructions dans la documentation officielle
Les autres instructions qu'on peut ajouter vont permettre d'aller plus loin qu'un simple Hello World.
La composition d'un Dockerfile minimal
Le Dockerfile est un fichier procédural qui permet de décrire l'installation d'un logiciel (la configuration d'un container) en enchaînant des instructions Dockerfile (en MAJUSCULE).
Exemple:
# our base image
FROM alpine:3.5
# run the application
CMD ["sh", "-c", "echo Hello World"]
On va immédiatement contruire une image avec ce Dockerfile.
- Créer un nouveau dossier dans son IDE
- Créer dans ce dossier un fichier nommé Dockerfile
- Y copier le contenu du fichier
- Lancer dans le dossier la commande
# docker build . -t minimal
- Lancer l'image docker nommée "minimal"
# docker run minimal
hello World
Faisons une pause
Ceci est une suite d'opérations importantes
2 instructions suffisent
Pour afficher "Hello World", il nous a fallu au moins 2 instructions
- le système de base dans lequel on veut lancer le process
- la commande du process qu'on veut lancer ici
sh -c "echo Hello World"
Q: Que se passerait-il si on ne donnait pas la 2e commande ?
build = Dockerfile -> Image
La commande build
est l'opération qui "prépare le plat", et le met dans un format "consommable".
La commande pour est :
docker build [-t <tag:version>] [-f <chemin_du_dockerfile>] <contexte_de_construction>
Lors de la construction, Docker télécharge l'image de base. On constate plusieurs téléchargements en parallèle.
Il lance ensuite la séquence des instructions du Dockerfile.
Observez l'historique de construction de l'image avec docker image history <image>
Il lance ensuite la série d'instructions du Dockerfile et indique un hash pour chaque étape.
C'est le hash correspondant à un layer de l'image