Qu'est-ce que Docker ?
Docker est une plateforme open-source de conteneurisation qui permet d'empaqueter une application et toutes ses dependances dans un conteneur leger et portable. Lance en 2013, Docker a revolutionne le deploiement logiciel en resolvant le probleme classique "ca marche sur ma machine" : un conteneur Docker fonctionne de maniere identique en developpement, en test et en production.
Conteneurs vs machines virtuelles
Un conteneur Docker partage le noyau Linux de la machine hote et isole les processus avec les namespaces (isolation des processus, reseau, systeme de fichiers) et les cgroups (limitation des ressources CPU, memoire). 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 superieure (des dizaines de conteneurs par machine vs quelques VM).
Images et Dockerfile
Une image Docker est un modele en lecture seule compose de couches (layers) empilees. Chaque instruction du Dockerfile cree une couche : FROM (image de base), RUN (execution de commandes), COPY (ajout de fichiers), ENV (variables d'environnement), EXPOSE (port documente), CMD/ENTRYPOINT (commande de demarrage). 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 separer l'etape de compilation de l'image finale, produisant des images beaucoup plus legeres.
Docker Compose et orchestration
Docker Compose (fichier docker-compose.yml) definit et orchestre des applications multi-conteneurs : application, base de donnees, cache Redis, reverse proxy. Chaque service a sa configuration (image, ports, volumes, reseaux). Pour la production a grande echelle, Kubernetes orchestre les conteneurs avec du scaling automatique, de la haute disponibilite et des deploiements progressifs. Docker Swarm est l'orchestrateur natif de Docker mais Kubernetes domine le marche.
Docker dans le workflow de developpement
Docker standardise les environnements de developpement : chaque developpeur travaille dans le meme environnement quel que soit son OS. Les dev containers (VS Code) offrent un environnement de developpement complet dans un conteneur. Les images sont versionees et stockees dans des registres (Docker Hub, GitHub Container Registry, AWS ECR). Le CI/CD construit, teste et deploie des images Docker automatiquement a chaque commit.