Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐳
Intermediaire 20 min Docker

Dockerfile : bonnes pratiques

Pourquoi Dockerfile : bonnes pratiques ?

Le développement moderne est souvent caractérisé par l'utilisation de systèmes d'exploitation légers, des conteneurs et des microservices. Les Dockerfiles jouent un rôle crucial dans ce processus en définissant comment une image Docker doit être construite à partir d'un ensemble de instructions.

Un cas concret d'utilisation concerne le déploiement d'une application web sur un environnement cloud. En utilisant un Dockerfile, on peut s'assurer que l'image contient exactement les dépendances nécessaires et que la configuration est cohérente entre différents environnements.

Prerequis

  • Connaissance de base du système d'exploitation Linux
  • Familiarité avec les concepts de Docker
  • Installation de Docker (version 20.10 ou ultérieure)
  • Connaissance des langages de programmation courants utilisés pour créer des applications (Python, Node.js, Java, etc.)

Concepts fondamentaux

1. FROM

La première instruction dans un Dockerfile est FROM, qui spécifie la base image sur laquelle se construira l'image finale.

## Base image
FROM python:3.9-slim

2. WORKDIR

WORKDIR définit le répertoire de travail pour les instructions suivantes.

## Set working directory
WORKDIR /app

3. COPY

COPY copie des fichiers ou des répertoires du système d'hôte dans l'image Docker.

## Copy application files
COPY . /app

4. RUN

RUN exécute une commande dans un nouveau layer de l'image.

## Install dependencies
RUN pip install --no-cache-dir -r requirements.txt

5. CMD et ENTRYPOINT

CMD définit la commande par défaut à exécuter quand l'image est lancée, tandis que ENTRYPOINT spécifie un shell ou un programme qui sera exécuté.

## Define the default command to run
CMD ["python", "app.py"]

Mise en pratique : projet fil rouge

Nous allons créer une application simple d'un gestionnaire de tâches. Voici les étapes pour la construire :

Étape 1 : Créer un nouveau répertoire et initialiser un Dockerfile

mkdir task-manager
cd task-manager
touch Dockerfile

Étape 2 : Définir la base image et le répertoire de travail

## Base image
FROM python:3.9-slim

## Set working directory
WORKDIR /app

Étape 3 : Copier les fichiers nécessaires dans l'image

## Copy application files
COPY . /app

Étape 4 : Installer les dépendances

Assurez-vous que vous avez un requirements.txt avec les dépendances nécessaires.

echo "Flask==2.0.1" > requirements.txt

Ajoutez cette ligne dans votre Dockerfile :

## Install dependencies
RUN pip install --no-cache-dir -r requirements.txt

Étape 5 : Définir la commande par défaut

Assurez-vous que vous avez un fichier app.py avec une application Flask simple.

## app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Task Manager!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Ajoutez cette ligne dans votre Dockerfile :

## Define the default command to run
CMD ["python", "app.py"]

Étape 6 : Construire l'image

docker build -t task-manager .

Étape 7 : Lancer le conteneur

docker run -p 5000:5000 task-manager

Accédez à http://localhost:5000 dans votre navigateur pour voir votre application en action.

Erreurs frequentes et debugging

1. "error loading manifest from blob"

## ❌ Mauvais
RUN pip install -r requirements.txt
bash
## Error message
error loading manifest from blob: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
docker
## ✅ Correct
RUN pip install --no-cache-dir -r requirements.txt

2. "Permission denied"

## ❌ Mauvais
COPY . /app
bash
## Error message
Error response from daemon: failed to create symbolic link on mounter: mkdir /var/lib/docker/overlay2/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/mounts/0/files: permission denied
docker
## ✅ Correct
RUN chown -R $(whoami):$(whoami) /app && COPY . /app

3. "No such file or directory"

## ❌ Mauvais
CMD ["python", "app.py"]
bash
## Error message
/usr/bin/python: can't open file 'app.py': [Errno 2] No such file or directory
docker
## ✅ Correct
COPY app.py /app/app.py
CMD ["python", "/app/app.py"]

Pour aller plus loin

  1. Utilisation de layers : Apprenez à optimiser votre Dockerfile en minimisant le nombre de couches.

  2. Utilisation de .dockerignore : Créez un fichier .dockerignore pour éviter d'ajouter des fichiers inutiles dans votre image.

  3. Automatisation du build et du déploiement : Intégrez votre Dockerfile dans un pipeline CI/CD pour automatiser le build et le déploiement.

Défi pratique

Créez une application simple d'un API de blog utilisant Flask. Votre application devrait permettre aux utilisateurs de créer, lire, mettre à jour et supprimer des articles.

Construire votre Dockerfile en suivant les étapes similaires à celles du projet fil rouge. Assurez-vous que vous utilisez une base image appropriée, que vous copiez correctement les fichiers nécessaires, que vous installez les dépendances, et que vous définissez la commande par défaut pour exécuter votre application.

Bonne chance avec votre défis !

Besoin d'aide sur Docker ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quelle est la différence entre COPY et ADD dans un Dockerfile?
COPY et ADD sont utilisés pour copier des fichiers ou des répertoires d'une source vers le chemin de destination spécifié dans l'image Docker. La principale différence est que ADD peut également récupérer des fichiers à partir de l'URL et les décompresser, tandis que COPY n'a pas cette fonctionnalité.
Quelles sont les bonnes pratiques pour utiliser des variables d'environnement dans un Dockerfile?
Il est recommandé d'utiliser le mot-clé ENV pour définir des variables d'environnement. Cela permet de rendre la configuration de l'image plus flexible et facilement modifiable. Évitez d'encoder des secrets directement dans le Dockerfile.
Quelle est l'importance de l'étape FROM en un Dockerfile?
L'étape FROM est cruciale car elle définit la base sur laquelle se construit l'image. Elle spécifie la version du système d'exploitation et des outils nécessaires pour le reste de l'image. Utiliser une image officielle comme base est une bonne pratique pour assurer la sécurité et la stabilité.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.