Dockerfile vs. Docker Compose : comprendre les différences et les cas d’utilisation
Docker a révolutionné la conteneurisation, en fournissant des outils puissants pour la création et la gestion d’applications conteneurisées. Les deux concepts principaux de Docker sont Dockerfile et Docker Compose. Bien que les deux soient essentiels, ils servent des objectifs différents. Un Dockerfile est utilisé pour définir une image de conteneur unique, tandis que Docker Compose simplifie la gestion des applications multi-conteneurs.
Dans ce tutoriel, vous allez apprendre :
- Les différences fondamentales entre Dockerfile et Docker Compose
- Quand utiliser Dockerfile et quand utiliser Docker Compose
- Exemples pratiques des deux approches
Dockerfile contre Docker Compose
Un Dockerfile est un script contenant un ensemble d’instructions pour construire une image Docker. Il spécifie l’image de base, les dépendances, les configurations et les commandes requises pour configurer l’environnement.
Docker Compose, quant à lui, est un outil qui définit et exécute des applications Docker multi-conteneurs à l’aide d’un fichier docker-compose.yml
. Il permet d’orchestrer plusieurs conteneurs avec des variables de mise en réseau, de volumes et d’environnement.
Remarque : Les exemples suivants ne sont pas des applications entièrement fonctionnelles. Ils servent de squelette de base pour aider à comprendre les concepts de Dockerfile et Docker Compose.
Exemple 1 : Création d’une application web simple à l’aide de Dockerfile
Dans cet exemple, nous créons une application Web Flask basée sur Python à l’aide d’un Dockerfile.
Dockerfile pour l’application Flask : Vous trouverez ci-dessous un Dockerfile simple pour une application Python Flask.
Use an official Python runtime as base image FROM python:3.9 Set the working directory WORKDIR /app Copy application files COPY . . Install dependencies RUN pip install -r requirements.txt Define the command to run the app CMD ["python", "app.py"]
Ce Dockerfile extrait une image Python, configure l’environnement, copie les fichiers de l’application, installe les dépendances et exécute l’application.
Exemple 2 : Utilisation de Docker Compose pour gérer plusieurs conteneurs
Voyons maintenant comment Docker Compose peut être utilisé pour gérer une application Flask avec une base de données PostgreSQL.
docker-compose.yml pour Flask et PostgreSQL : vous trouverez ci-dessous une configuration Docker Compose pour une application Flask et une base de données PostgreSQL.
version: '3.8' services: web: build: . ports: - "5000:5000" depends_on: - db db: image: postgres:13 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydatabase
Cette configuration définit deux services :
- web : Il s’agit du service d’application Flask. La directive
build : .
indique à Docker Compose de construire l’image en utilisant leDockerfile
présent dans le même répertoire. Cela signifie qu’il suit toutes les étapes définies dans le Dockerfile, y compris la configuration de l’environnement, l’installation des dépendances et la définition du mode d’exécution de l’application.
- web : Il s’agit du service d’application Flask. La directive
- db : Il s’agit du service de base de données PostgreSQL. Au lieu de créer une image personnalisée, il extrait une image PostgreSQL officielle de Docker Hub. Les variables d’environnement configurent l’utilisateur, le mot de passe et le nom de la base de données.
La directive depends_on
garantit que le service Web ne démarre qu’une fois le conteneur de base de données actif.
Conclusion
Comprendre la différence entre Dockerfile et Docker Compose est crucial pour un déploiement efficace d’applications conteneurisées. Utilisez Dockerfile lorsque vous avez besoin de définir et de générer une image, et utilisez Docker Compose pour orchestrer plusieurs conteneurs avec mise en réseau et dépendances.