# Guide d'introduction à Docker : Conteneurisez rapidement votre application
Docker est devenu une partie intégrante du développement et du déploiement de logiciels modernes. Bien que les discussions autour de Kubernetes soient omniprésentes, Docker reste l'outil de choix pour de nombreuses entreprises pour construire, tester et déployer des applications. Cet article vous guidera à travers une introduction rapide à Docker, vous fera découvrir ses concepts clés et vous fournira un exemple pratique pour vous aider à démarrer la conteneurisation de votre application.
## Concepts clés de Docker
Avant de commencer la pratique, il est essentiel de comprendre certains concepts clés de Docker :
* **Image :** Une image est un modèle en lecture seule qui contient tout ce qui est nécessaire pour exécuter une application : code, environnement d'exécution, outils système, bibliothèques et dépendances. Similaire à une image de machine virtuelle, mais plus légère.
* **Conteneur :** Un conteneur est une instance en cours d'exécution créée à partir d'une image. C'est une instance d'exécution d'une image, contenant l'application et toutes ses dépendances. Les conteneurs sont isolés les uns des autres, possédant leur propre système de fichiers, processus et espace réseau.
* **Docker Hub :** Docker Hub est un registre d'images public où vous pouvez télécharger des images pré-construites ou télécharger vos propres images. Similaire à GitHub, mais dédié aux images Docker.
* **Dockerfile :** Un Dockerfile est un fichier texte contenant toutes les instructions pour construire une image Docker. En écrivant un Dockerfile, vous pouvez automatiser le processus de création d'images.
* **Docker Compose :** Docker Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. Il vous permet de configurer les services de l'application à l'aide d'un fichier YAML, puis de démarrer ou d'arrêter tous les services à l'aide d'une seule commande.
## Installation de Docker
Tout d'abord, vous devez installer Docker. Docker fournit des packages d'installation pour divers systèmes d'exploitation. Visitez le [site officiel de Docker](https://www.docker.com/get-started/) et suivez les instructions correspondantes pour l'installation.
Une fois l'installation terminée, vous pouvez vérifier si Docker est correctement installé en exécutant la commande `docker --version`.
## Conteneurisation d'une simple application Python
Nous allons créer une simple application Python et la conteneuriser à l'aide de Docker.
### 1. Création de l'application Python
Créez un fichier nommé `app.py` contenant le code suivant :
```python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
```
Cette simple application Flask renvoie "Hello, Docker!" sur le chemin racine `/`.
### 2. Création du fichier `requirements.txt`
L'application dépend de la bibliothèque Flask, nous devons donc créer un fichier `requirements.txt` pour déclarer ces dépendances.
```
Flask
```
### 3. Création du Dockerfile
Créez un fichier nommé `Dockerfile` et ajoutez le contenu suivant :
```dockerfile
# Utiliser l'image Python officielle comme image de base
FROM python:3.9-slim-buster
# Définir le répertoire de travail
WORKDIR /app
# Copier le fichier requirements.txt dans le répertoire de travail
COPY requirements.txt .
# Installer les dépendances
RUN pip install --no-cache-dir -r requirements.txt
```# Copier le code de l'application dans le répertoire de travail
COPY app.py .
# Exposer le port 5000
EXPOSE 5000
# Définir la commande de démarrage
CMD ["python", "app.py"]
```
**Explication du Dockerfile :**
* `FROM python:3.9-slim-buster`: Spécifie l'image de base comme étant une version allégée de Python 3.9.
* `WORKDIR /app`: Définit le répertoire de travail à l'intérieur du conteneur comme étant `/app`.
* `COPY requirements.txt .`: Copie le fichier `requirements.txt` du répertoire courant vers le répertoire `/app` du conteneur.
* `RUN pip install --no-cache-dir -r requirements.txt`: Exécute la commande `pip` à l'intérieur du conteneur pour installer les dépendances spécifiées dans le fichier `requirements.txt`. L'argument `--no-cache-dir` permet de réduire la taille de l'image.
* `COPY app.py .`: Copie le fichier `app.py` du répertoire courant vers le répertoire `/app` du conteneur.
* `EXPOSE 5000`: Déclare que le conteneur écoutera sur le port 5000.
* `CMD ["python", "app.py"]`: Définit la commande à exécuter au démarrage du conteneur.
### 4. Construire l'image Docker
Dans le répertoire contenant le `Dockerfile`, exécutez la commande suivante pour construire l'image Docker :
```bash
docker build -t my-python-app .
```
* `docker build`: Commande pour construire l'image.
* `-t my-python-app`: Attribue un nom à l'image (`my-python-app`).
* `.`: Spécifie le répertoire où se trouve le Dockerfile (le répertoire courant).
Le processus de construction peut prendre un certain temps, en fonction de la vitesse du réseau et de la taille des dépendances.
### 5. Exécuter le conteneur Docker
Utilisez la commande suivante pour exécuter le conteneur Docker :
```bash
docker run -d -p 5000:5000 my-python-app
```
* `docker run`: Commande pour exécuter le conteneur.
* `-d`: Exécute le conteneur en mode détaché (en arrière-plan).
* `-p 5000:5000`: Mappe le port 5000 de l'hôte au port 5000 du conteneur.
* `my-python-app`: Spécifie le nom de l'image à utiliser.
### 6. Vérifier l'application
Dans un navigateur, accédez à `http://localhost:5000`. Vous devriez voir "Hello, Docker!"
### 7. Arrêter et supprimer le conteneur
Utilisez la commande suivante pour arrêter le conteneur :
```bash
docker stop
```
`` peut être trouvé en utilisant la commande `docker ps`.
Utilisez la commande suivante pour supprimer le conteneur :
```bash
docker rm
```
## Introduction à Docker Compose
Si votre application est composée de plusieurs services, vous pouvez utiliser Docker Compose pour les gérer.
### 1. Créer un fichier `docker-compose.yml`
Créez un fichier nommé `docker-compose.yml` et ajoutez le contenu suivant :
```yaml
version: "3.9"
services:
web:
image: my-python-app
ports:
- "5000:5000"
```
**Explication du docker-compose.yml :*** `version: "3.9"`: Spécifie la version du fichier Docker Compose.
* `services`: Définit les services de l'application.
* `web`: Définit un service nommé "web".
* `image: my-python-app`: Spécifie l'image utilisée par le service.
* `ports`: Définit le mappage des ports.
### 2. Démarrer l'application
Dans le répertoire contenant le fichier `docker-compose.yml`, exécutez la commande suivante pour démarrer l'application :
```bash
docker-compose up -d
```
* `docker-compose up`: Commande pour démarrer l'application.
* `-d`: Exécute le conteneur en mode détaché.
### 3. Arrêter l'application
Utilisez la commande suivante pour arrêter l'application :
```bash
docker-compose down
```
## Meilleures pratiques de sécurité Docker
Comme on peut le constater dans la discussion, la sécurité des images Docker est une question importante. Voici quelques meilleures pratiques de sécurité Docker :
* **Utiliser des images officielles :** Utilisez autant que possible les images fournies officiellement, car elles sont généralement soumises à des analyses de sécurité et à une maintenance.
* **Analyser les vulnérabilités des images :** Utilisez des outils tels que Trivy pour analyser les vulnérabilités connues dans les images et mettez à jour les images rapidement.
* **Utiliser le principe du moindre privilège :** Évitez d'exécuter des conteneurs en tant qu'utilisateur root.
* **Limiter les ressources du conteneur :** Utilisez cgroups pour limiter l'utilisation du CPU et de la mémoire du conteneur.
* **Mettre à jour les images régulièrement :** Gardez les images à jour pour corriger les failles de sécurité.
* **Utiliser des outils d'analyse de sécurité :** Des outils comme Snyk, Clair, etc. peuvent être intégrés à votre processus CI/CD pour analyser automatiquement les vulnérabilités des images.
## Conclusion
Cet article fournit un guide de démarrage rapide avec Docker, couvrant les concepts de base, les étapes d'installation et un exemple simple de conteneurisation d'une application Python. En apprenant ces bases, vous pouvez commencer à utiliser Docker pour construire, tester et déployer vos applications. Rappelez-vous, la sécurité est primordiale, soyez toujours attentif à la sécurité des images Docker et prenez les mesures appropriées pour protéger vos applications. Bien que Kubernetes soit puissant pour l'orchestration de conteneurs à grande échelle, Docker reste une solution simple et efficace dans de nombreux scénarios. En maîtrisant Docker, vous serez mieux équipé pour relever les défis du développement et du déploiement de logiciels modernes.
Concepts clés de Docker :
- Image Docker : Un modèle en lecture seule avec des instructions pour créer un conteneur. (Une image Docker est un modèle en lecture seule contenant les instructions pour créer un conteneur.)
- Conteneur Docker : Une instance exécutable d'une image. (Un conteneur Docker est une instance exécutable d'une image.)
- Dockerfile : Un fichier texte contenant les instructions pour construire une image Docker. (Un Dockerfile est un fichier texte contenant les instructions pour construire une image Docker.)
- Docker Hub : Un registre public pour partager et télécharger des images Docker. (Docker Hub est un registre public pour partager et télécharger des images Docker.)
Installation de Docker :
Suivez les instructions d'installation spécifiques à votre système d'exploitation sur le site officiel de Docker. (Suivez les instructions d'installation spécifiques à votre système d'exploitation sur le site officiel de Docker.)
Exemple de conteneurisation d'une application Python :
- Créer un fichier
app.py :
# app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Bonjour le monde!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
- Créer un fichier
requirements.txt :
# requirements.txt
Flask
- Créer un
Dockerfile :
# Dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py ./
CMD ["python", "app.py"]
- Construire l'image Docker :
docker build -t mon-app-python .
- Exécuter le conteneur Docker :
docker run -d -p 5000:5000 mon-app-python
Vous pouvez maintenant accéder à votre application dans votre navigateur à l'adresse http://localhost:5000. (Vous pouvez maintenant accéder à votre application dans votre navigateur à l'adresse http://localhost:5000.)