Syntaxe des Dockerfile

Fondamental

Il existe des dizaines d'instructions pour les Dockerfiles. Nous allons ici voir quelque une des instructions principales ainsi que la syntaxe que doit avoir le Dockerfile.

Un Dockerfile est composé de deux éléments principaux : des instructions, des commentaires.

1
# Les commentaires commencent par un "#"
2
INSTRUCTION arguments

Les lignes d'instruction d'un Dockerfile sont composée de deux composants :

  • L'INSTRUCTION elle même

  • Des arguments attachés à cette INSTRUCTION

Bien que les instructions ne sont pas sensibles à la case, il est standard de les écrire en majuscule permettant ainsi de les différencier des arguments.

1
FROM busybox:latest
2
CMD echo Hello World!!

Dans notre exemple, FROM représente une instruction prenant en paramètre busybox:latest.

Les lignes vides ne sont pas interprétées par Docker et sont ignorées.

MéthodeFROM

L'instruction FROM est la plus importante et constitue la première instruction valide d'un fichier Dockerfile.

Elle définit l'image de base pour le processus de construction de notre image personnalisée. Les instructions suivantes utiliseront cette image de base et s'appuieront dessus. Le système de compilation Docker vous permet d'utiliser des images créées par n'importe qui.

Par défaut, le système de construction Docker recherche les images présentes sur la machine. Si l'image n'est pas trouvée, Docker va tenter de la télécharger depuis le Docker Hub disponible au public. Le système de construction Docker renvoie une erreur s'il ne parvient pas à trouver l'image.

MéthodeCOPY

L'instruction COPY permet de copier un fichier entre la machine hôte et le système de fichier de notre nouvelle image. La syntaxe est la suivante :

1
COPY <source> <destination>

<source> correspond à un fichier ou un dossier présent dans le contexte de build (le dossier courant) sur la machine hôte

<destination> correspond au chemin du fichier dans notre nouvelle image

Si la destination n'est pas un chemin absolu, le démon Docker va commencer à partir de / à noter que la commande COPY est capable de construire automatiquement une arborescence dans la nouvelle image si celle-ci n'est pas existante.

RemarqueADD

Il existe une autre commande qui a le même comportement que COPY : la commande ADD. Cette commande permet de copier des fichiers dans le conteneur aussi bien depuis votre machine ou à parti d'une URL. Elle est aussi capable de décompresser des archives automatiquement.

Cependant, son utilisation n'est pas recommandée puisqu'elle peut amener à introduire dans un conteneur des fichiers vérolés ou provenant de sources non identifiées. Avec la commande COPY, on s'assure de copier uniquement ce qui est nécessaire et dont on connaît le contenu.

MéthodeRUN

L'instruction RUN fait partie des instructions principales d'un Dockerfile. Elle peut exécuter n'importe quelle commande dans votre image. La syntaxe est la suivante :

1
RUN <commande>

Nous allons le voir par la suite mais chaque instruction du Dockerfile va se transformer en layer. Il est recommandé de regrouper toutes les instructions RUN dans une seule et même instruction. Pour l'installation du package wget, on va donc utiliser l'instruction suivante :

1
RUN apt-get update && \
2
    apt-get install -y wget && \
3
    apt-get clean

MéthodeENV

L'instruction ENV définit une variable d'environnement dans la nouvelle image. Une variable d'environnement est une paire clé-valeur, accessible à n'importe quel script ou application. Les applications Linux utilisent beaucoup les variables d'environnement pour une configuration initiale.

1
ENV <clé> <valeur>

<clé>: représente la variable d'environnement qui va être définie

<value>: représenta la valeur qui va être attribuée à la variable d'environnement

MéthodeVOLUME

L'instruction VOLUME crée un répertoire dans le système de fichiers de notre nouvelle image. Il peut ensuite être utilisé pour monter des volumes à partir de l'hôte Docker ou des autres conteneurs.

1
VOLUME <point de montage>
2
#ou
3
VOLUME ["<point de montage>"]

Dans les lignes précédentes, <point de montage> est le dossier à exposer dans la nouvelle image.

MéthodeEXPOSE

L'instruction EXPOSE ouvre un port réseau de conteneur pour la communication entre le conteneur et le monde externe.

1
EXPOSE <port>[/<protocole>] [<port>[/<protocole>]...]

<port>: C'est le port réseau qui doit être exposé au monde extérieur.

<protocole>: Il s'agit d'un champ facultatif permettant de spécifier un protocole de transport spécifique, tel que TCP et UDP. Si aucun protocole de transport n'a été spécifié, alors TCP est supposé être le protocole de transport.

MéthodeCMD

L'instruction CMD peut exécuter n'importe quelle commande à la manière de l'instruction RUN. Cependant, la différence majeure entre ces deux, c'est le moment de l'exécution. La commande fournie via l'instruction RUN est exécutée pendant la construction de l'image, tandis que la commande spécifiée par l'instruction CMD est exécutée lorsque le conteneur est lancé.

L'instruction CMD fournit une exécution par défaut de l'image que l'on va construire.

1
CMD <commande>

Bien qu'il soit possible d'avoir plusieurs instructions CMD dans un Dockerfile, c'est la dernière instruction CMD qui va être retenue et utilisée comme commande par défaut.

Remarque

Il est possible de remplacer l'instruction CMD au lancement d'un conteneur Docker. Dans l'exemple ci-dessous, ma_commande va remplacer l'instruction CMD se trouvant dans le Dockerfile de mon_image

1
docker run mon_image ma_commande