Skip to main content

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.

ressources supplĂ©mentaires​

Documentation Dockerfile: ici
Docker Hub: ici