Qu'est-ce que Docker ?
Docker est une plateforme open-source de conteneurisation qui permet d'empaqueter une application et toutes ses dépendances dans un conteneur léger et portable. Lance en 2013, Docker a revolutionne le déploiement logiciel en resolvant le problème classique "ca marche sur ma machine" : un conteneur Docker fonctionne de manière identique en développement, en test et en production.
Conteneurs vs machines virtuelles
Un conteneur Docker partage le noyau Linux de la machine hôte et isole les processus avec les namespaces (isolation des processus, réseau, système de fichiers) et les cgroups (limitation des ressources CPU, mémoire). Contrairement aux machines virtuelles qui embarquent un OS complet (plusieurs Go), les conteneurs sont legers (quelques Mo), demarrent en secondes et permettent une densite bien supérieure (des dizaines de conteneurs par machine vs quelques VM).
Images et Dockerfile
Une image Docker est un modèle en lecture seule compose de couches (layers) empilees. Chaque instruction du Dockerfile cree une couche : FROM (image de base), RUN (exécution de commandes), COPY (ajout de fichiers), ENV (variables d'environnement), EXPOSE (port documente), CMD/ENTRYPOINT (commande de démarrage). Les couches sont mises en cache : si une instruction n'a pas change, Docker reutilise la couche existante, accelerant la construction. Les multi-stage builds permettent de séparer l'étape de compilation de l'image finale, produisant des images beaucoup plus legeres.
Docker Compose et orchestration
Docker Compose (fichier docker-compose.yml) définit et orchestre des applications multi-conteneurs : application, base de données, cache Redis, reverse proxy. Chaque service à sa configuration (image, ports, volumes, réseaux). Pour la production a grande échelle, Kubernetes orchestre les conteneurs avec du scaling automatique, de la haute disponibilité et des déploiements progressifs. Docker Swarm est l'orchestrateur natif de Docker mais Kubernetes domine le marché.
Docker dans le workflow de développement
Docker standardise les environnements de développement : chaque développeur travaille dans le même environnement quel que soit son OS. Les dev containers (VS Code) offrent un environnement de développement complet dans un conteneur. Les images sont versionees et stockées dans des registres (Docker Hub, GitHub Container Registry, AWS ECR). Le CI/CD construit, teste et deploie des images Docker automatiquement à chaque commit.