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.