Aller au contenu principal

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