La syntaxe d’un Dockerfile est la suivante :
FROM image
# Comment
INSTRUCTION arguments
Un dockerfile commencera toujours pas un FROM.
Plusieurs FROM peuvent être utilisés (multi-stages).
Voici une liste des instructions :
FROM
: Définit l'image de base qui sera utilisée par les instructions suivantes.LABEL
: Ajoute des métadonnées à l'image avec un système de clés-valeurs, permet par exemple d'indiquer à l'utilisateur l'auteur du Dockerfile.ARG
: Variables temporaires qu'on peut utiliser dans un Dockerfile.ENV
: Variables d'environnements utilisables dans votre Dockerfile et conteneur.RUN
: Exécute des commandes Linux ou Windows lors de la création de l'image. Chaque instruction RUN va créer une couche en cache qui sera réutilisée dans le cas de modification ultérieure du Dockerfile.COPY
: Permet de copier des fichiers depuis notre machine locale vers le conteneur Docker.ADD
: Même chose que COPY mais prend en charge des liens ou des archives (si le format est reconnu, alors il sera décompressé à la volée).ENTRYPOINT
: comme son nom l'indique, c'est le point d'entrée de votre conteneur, en d'autres termes, c'est la commande qui sera toujours exécutée au démarrage du conteneur. Il prend la forme de tableau JSON (ex : CMD ["cmd1","cmd1"]) ou de texte.CMD
: Spécifie les arguments qui seront envoyés au ENTRYPOINT, (on peut aussi l'utiliser pour lancer des commandes par défaut lors du démarrage d'un conteneur). Si il est utilisé pour fournir des arguments par défaut pour l'instruction ENTRYPOINT, alors les instructions CMD et ENTRYPOINT doivent être spécifiées au format de tableau JSON.WORKDIR
: Définit le répertoire de travail qui sera utilisé pour le lancement des commandes CMD et/ou ENTRYPOINT et ça sera aussi le dossier courant lors du démarrage du conteneur.EXPOSE
: Expose un port.VOLUMES
: Crée un point de montage qui permettra de persister les données.USER
: Désigne quel est l'utilisateur qui lancera les prochaines instructions RUN, CMD ou ENTRYPOINT (par défaut c'est l'utilisateur root).Pour expliquer le Dockerfile de la section "Travailler avec des images Docker" :
FROM
: on utilise l'image UbuntuRUN
: on exécuter les commandes apt-get update et apt-get -y install nginxCMD
: commande qui s'exécute au lancement du conteneur, ici, lancement du serveur nginxOn veut maitenant créer un Dockerfile avec un fichier index.html personnalisé.
Pour commencer on peut partir d’une image ubuntu puis se connecter en bash dessus afin de faire les commandes une à une :
docker container run -d -p 80:80 -t --name mynginx ubuntu
docker container exec -it mynginx bash
On va donc exécuter les commandes nécessaires pour installer nginx :
apt-get update
apt-get install nginx
echo “Welcome to nginx in Docker” > index.nginx-debian.html
nginx -g ‘daemon off;’
On va maintenant passer à l’initialisation du Dockerfile.
Pour se faire nous allons d’abord créer un fichier index.nginx-debian.html à la racine du dossier de demo avec notre code HTML, puis créer un Dockerfile qui ressemblera à ça :
# Image ubuntu latest
FROM ubuntu
# Afin d'opitimiser l'image, il est préférable de RUN tout sur une seule ligne
RUN apt-get update
RUN apt-get install nginx
# On va maintenant copier index.nginx-debian.html de notre hôte vers le dossier /var/www/html du conteneur
COPY index.nginx-debian.html /var/www/html
# On lance nginx
CMD nginx -g ‘daemon off;’
On va ensuite build l'image :
docker build .