Introduction Dockerfile
Dockerfile, c'est quoi ?â
Un Dockerfile est un fichier texte qui contient des instructions pour crĂ©er une image Docker. Une image Docker est un ensemble de fichiers et de rĂ©pertoires qui peuvent ĂȘtre utilisĂ©s pour crĂ©er des conteneurs.
Installation de Dockerâ
La premiÚre étape pour utiliser les Dockerfile est d'installer Docker. Vous pouvez installer Docker sur votre systÚme en suivant les instructions sur le tutoriel Docker introduction.
CrĂ©ation d'un fichier Dockerfileâ
Créez un nouveau fichier nommé "Dockerfile".
touch Dockerfile
Les instructions du Dockerfileâ
Les instructions du Dockerfile sont des commandes utilisées pour paramétrer une image Docker. Par convention, elles sont toujours écrites en majuscule.
Voici les instructions les plus courantes :
FROMâ
Cette instruction est placé en premier dans un dockerfile, elle définit l'image de base sur laquelle sera construite l'image Docker.
FROM ubuntu:22.04
Cela signifie que l'image sera construite Ă partir de l'image ubuntu:22.04.
LABELâ
Permet d'ajouter des métadonnées à l'image. Celles-ci peuvent inclure des informations comme l'auteur, la version, des descriptions, etc...
LABEL maintainer="john.doe@example.com"
LABEL version="1.0"
RUNâ
Exécute une commande dans l'image pendant la construction. Cette instruction est utilisée pour installer des logiciels, effectuer des configurations, etc...
RUN apt update && apt install -y curl
COPYâ
Copie des fichiers ou des rĂ©pertoires depuis le systĂšme local (oĂč se trouve le Dockerfile) vers le systĂšme de fichiers de lâimage Docker.
COPY ./myapp /app
ADDâ
Semblable à COPY, mais avec quelques différences. ADD peut également décompresser des archives et gérer des URLs comme sources.
ADD archive.tar.gz /app
Cette commande ajoutera l'archive archive.tar.gz et la décompressera dans /app.
CMDâ
Définis la commande par défaut à exécuter lorsqu'un conteneur est démarré à partir de l'image. Il est possible de spécifier une commande sous forme de chaßne ou sous forme de tableau.
CMD ["python", "app.py"]
ENTRYPOINTâ
DĂ©finis un point d'entrĂ©e pour un conteneur. Contrairement Ă CMD, qui peut ĂȘtre remplacĂ© par l'utilisateur, ENTRYPOINT dĂ©finit la commande principale Ă exĂ©cuter et permet de spĂ©cifier des arguments supplĂ©mentaires via CMD.
ENTRYPOINT ["python", "app.py"]
EXPOSEâ
Indique les ports que le conteneur va écouter au moment de son exécution. Cela ne permet pas de rendre ces ports accessibles de l'extérieur, mais permet à Docker de savoir quels ports exposer.
EXPOSE 8080
ENVâ
Définis une variable d'environnement dans le conteneur.
ENV PATH=/usr/local/bin:$PATH
ARGâ
Définis une variable d'argument lors de la construction de l'image. Elle est utilisée pour passer des valeurs dynamiques au moment de la construction.
ARG VERSION=1.0
VOLUMEâ
Crée un volume docker et le monte dans le conteneur. Les volumes sont utilisés pour persister des données.
VOLUME ["/data"]
WORKDIRâ
Définis le répertoire de travail pour les instructions comme RUN, CMD, etc...
WORKDIR /app
USERâ
Définis l'utilisateur et optionnellement le groupe sous lequel les instructions suivantes seront exécutées.
USER appuser[:appgroup]
STOPSIGNALâ
DĂ©finits le signal systĂšme qui doit ĂȘtre envoyĂ© pour arrĂȘter le conteneur.
STOPSIGNAL SIGTERM
HEALTHCHECKâ
Définit une commande pour vérifier l'état de santé du conteneur. Si le conteneur échoue à cette vérification, Docker peut redémarrer le conteneur.
HEALTHCHECK CMD curl --fail http://localhost:8080 || exit 1
SHELLâ
Permet de définir le shell utilisé pour les commandes exécutées par RUN, CMD, et ENTRYPOINT.
SHELL ["/bin/bash", "-c"]
Exemple de Dockerfileâ
Voici un exemple de Dockerfile qui crée une image Docker pour un serveur Web simple :
FROM ubuntu:latest
EXPOSE 8080
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html
Ce Dockerfile utilise l'image ubuntu:latest comme image de base.
Elle installe ensuite le package nginx et copie le fichier index.html dans le répertoire /usr/share/nginx/html.
Construction d'une image Dockerâ
Pour construire une image Docker, vous pouvez utiliser la commande docker build.
pour construire l'image Docker de l'exemple précédent, vous pouvez utiliser la commande suivante :
docker build -t my-webserver .
Cette commande construira une image Docker nommée my-webserver en utilisant le Dockerfile dans le répertoire actuel.
ExĂ©cution d'une image Dockerâ
Pour exécuter une image Docker, vous pouvez utiliser la commande docker run.
pour exécuter l'image Docker my-webserver créé précédemment, vous pouvez utiliser la commande suivante :
docker run -p 8080:80 -it my-webserver
Cette commande exécutera un conteneur à partir de l'image my-webserver et vous permettra d'interagir avec celui-ci sur le port 8080.
Evoyer une image sur Docker Hubâ
Ouvrez un terminal et connectez-vous Ă votre compte Docker Hub avec la commande suivante :
docker login
Entrez votre nom d'utilisateur et votre mot de passe lorsque vous y ĂȘtes invitĂ© ou valider le code via le navigateur.
Si vous avez déjà une image, assurez-vous de la taguer avec votre nom d'utilisateur et le nom que vous souhaitez lui donner, Par exemple :
docker tag nom_image votre_nom_utilisateur/nom_image:tag
Utilisez la commande suivante pour pousser l'image vers Docker Hub :
docker push votre_nom_utilisateur/nom_image:tag
Connectez-vous à votre compte Docker Hub dans un navigateur et vérifiez que votre image est bien disponible dans votre dépÎt.
Conclusionâ
Les Dockerfiles permettent de créer des images Docker personnalisées. En utilisant les instructions du Dockerfile, vous pouvez contrÎler le contenu et les paramÚtres de votre image Docker.