Présentation du projet
Ce projet consiste à découvrir Docker, une plateforme de conteneurisation qui permet d’empaqueter des applications et leurs dépendances dans des conteneurs légers, portables et isolés.
Objectifs
- Comprendre le concept de conteneurisation
- Installer Docker sur Linux
- Manipuler les images et conteneurs Docker
- Comprendre les différences avec la virtualisation
Contexte technique
Problématique
Le déploiement d’applications rencontre souvent des problèmes :
- “Ça marche sur ma machine” mais pas en production
- Dépendances conflictuelles entre applications
- Configuration différente entre environnements
- Lourdeur des machines virtuelles
- Gaspillage de ressources
Solution mise en œuvre
Docker résout ces problèmes en :
- Isolant les applications dans des conteneurs
- Normalisant l’environnement d’exécution
- Partageant le noyau de l’hôte (légèreté)
- Portabilité entre développement et production
- Déploiement rapide (secondes vs minutes pour VM)
Réalisation technique
Installation de Docker
BASH
# Mise à jour du système (Debian/Ubuntu)
sudo apt update && sudo apt upgrade -y
# Installation des dépendances
sudo apt install ca-certificates curl
# Ajout du dépôt Docker officiel
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
# Installation de Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Vérification de l'installation
docker --version
# Ajout de l'utilisateur au groupe docker
sudo usermod -aG docker $USERPremiers pas avec Docker
Test d’installation :
BASH
# Exécuter le conteneur de test
docker run hello-world
Commandes de base :
BASH
# Lister les conteneurs en cours d'exécution
docker ps
# Lister tous les conteneurs (même arrêtés)
docker ps -a
# Lister les images
docker images
Lancer un conteneur nginx :
BASH
# Télécharger une image
docker pull nginx
# Lancer un conteneur Nginx
docker run -d -p 8080:80 --name mon-nginx nginx
# Voir les logs d'un conteneur
docker logs mon-nginx
# Arrêter un conteneur
docker stop mon-nginx
# Supprimer un conteneur
docker rm mon-nginx
# Supprimer une image
docker rmi nginx
Résultats obtenus
✅ Docker installé et configuré
✅ Manipulation des images et conteneurs maîtrisée
✅ Concepts de conteneurisation compris
✅ Gains de performance et portabilité constatés
Compétences développées
- Compréhension de la conteneurisation
- Installation et configuration de Docker
- Manipulation d’images et conteneurs
- Écriture de Dockerfiles optimisés
- Utilisation de Docker Compose
- Gestion des volumes et réseaux Docker
- Bonnes pratiques de sécurité
Docker vs Virtualisation
| Aspect | Docker (Conteneurs) | VM (Machines Virtuelles) |
|---|---|---|
| Démarrage | < 1 seconde | 30-60 secondes |
| Taille | Mo (partage noyau) | Go (OS complet) |
| Performance | Native (quasi) | Overhead hyperviseur |
| Isolation | Processus | Matérielle |
| Portabilité | Excellente | Bonne |
| Densité | Très élevée | Moyenne |
Architecture Docker
PLAINTEXT
┌─────────────────────────────────────┐
│ Application Conteneur 1 │
│ ┌──────────┐ ┌──────────────┐ │
│ │ App Code │ │ Dependencies │ │
│ └──────────┘ └──────────────┘ │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Docker Engine │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Système d'exploitation │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Infrastructure (serveur) │
└─────────────────────────────────────┘Commandes avancées
BASH
# Inspecter un conteneur
docker inspect mon-conteneur
# Exécuter une commande dans un conteneur
docker exec -it mon-conteneur bash
# Copier des fichiers vers/depuis un conteneur
docker cp fichier.txt mon-conteneur:/app/
# Voir l'utilisation des ressources
docker stats
# Nettoyer les ressources inutilisées
docker system prune -aPoints clés d’apprentissage
- Les conteneurs partagent le noyau de l’OS hôte (plus légers que les VM)
- Les images Docker sont construites en couches (layers) pour optimisation
- Le layering permet le cache et réduit les temps de build
- Les données dans un conteneur sont éphémères (utiliser des volumes pour persistance)
- Docker Compose simplifie la gestion d’applications multi-conteneurs
- Les conteneurs sont immuables : ne pas modifier un conteneur en cours, reconstruire l’image
