Généralités | Docker
Docker
Docker est une plateforme open-source pour développer, livrer et exécuter des applications dans des conteneurs.
Composants clés : Docker Engine (gère les conteneurs), Docker Images (modèles immuables avec code et dépendances), Docker Containers (instances exécutables), Docker Hub (registre public).
Conteneurisation des applications
Un container est une virtualisation légère qui isole une application et ses dépendances, en partageant le noyau de l'OS hôte. Docker a standardisé ce concept en 2013 et reste le runtime le plus répandu.
Un conteneur est un environnement de travail pour les services qui est, le plus souvent, isoler des autres. On peut cependant choisir de faire communiquer des conteneurs ensemble, selon les besoins. Chaque conteneur peut être relié aux autres par le biais de réseaux virtuels. Il est possible de monter des volumes sur machine hôte dans un conteneur. Le stockage et les ressources alloués à chaque conteneur sont gérés dynamiquement, contrairement à une VM.
Les conteneurs sont une méthode de virtualisation légère qui permet de regrouper une application et ses dépendances dans un environnement isolé. Contrairement aux machines virtuelles, qui virtualisent un système d'exploitation entier, les conteneurs partagent le noyau du système d'exploitation hôte, ce qui les rend plus légers et plus rapides à démarrer.
Avantages principaux : portabilité (exécutables sur tout système compatible), efficacité (moins de surcharge), isolation (améliore sécurité et stabilité), scalabilité (facile à mettre à l'échelle).
Différences conteneurs vs machines virtuelles
| Caractéristique | Conteneurs | Machines virtuelles |
|---|---|---|
| Virtualisation | Au niveau OS | Au niveau matériel |
| Performance | Plus rapide à démarrer et exécuter | Plus lent |
| Ressources | Partage le noyau hôte, moins gourmand | OS complet par VM, plus de ressources |
| Isolation | Moins forte, mais suffisante souvent | Plus forte |
| Portabilité | Très portable | Moins, dépend de l'hyperviseur |
Les conteneurs conviennent aux microservices et déploiements rapides ; les VM aux OS complets ou isolation maximale.
Fonctionnement
Pour que les applications fonctionnent correctement, les conteneurs doivent disposer des éléments nécessaires (code, dépendance, ...). Cependant, pour faire fonctionner le tout avec le minimum de ressources, les conteneurs regroupent leurs contenus. En effet, il est possible de faire fonctionner plusieurs conteneurs sur la même machine qui vont alors partager le noyau de l'OS même s'ils continueront de travailler fondamentalement séparément (au niveau des processus exécutés par exemple).
Cela permet un gain de stockage et de ressources physiques sur les hôtes qui accueillent les conteneurs.
Du code à l'image : Dockerfile → docker build → Image → docker run → Container
- Le Dockerfile liste les instructions de construction de l'image
- docker build -t tag:version -f chemin/Dockerfile . — construit l'image
- docker run nginx — lance un container depuis une image
- docker push / pull — échange avec une registry (Docker Hub, GitLab Registry, Artifactory…)
Concepts essentiels du cycle de vie
| Notion | Description |
|---|---|
| Image layers | Chaque instruction du Dockerfile crée une couche immuable mise en cache CESI-MICSI-2026-DEVOPS-DAY-1.pdf |
| Réseau / Bridge | -p portHost:portContainer pour exposer un port depuis l'hôte CESI-MICSI-2026-DEVOPS-DAY-1.pdf |
| Volumes | Persistance des données hors du cycle de vie du container (/var/lib/docker/volumes) CESI-MICSI-2026-DEVOPS-DAY-1.pdf |
| Docker Compose | Fichier YAML pour orchestrer plusieurs containers d'une même stack (frontend, backend, BDD) CESI-MICSI-2026-DEVOPS-DAY-1.pdf |
Bonnes pratiques image
- Utiliser des images de base officielles et à jour (préférer alpine : ~6 Mo vs python:latest : ~918 Mo)
- Ne jamais stocker de secrets en dur dans l'image
- Scanner régulièrement les vulnérabilités avec Trivy
- Utiliser les multi-stage builds pour réduire la taille de l'image finale
Portainer
Docker est un système qui permet de faire tourner du code et ses dépendances dans des conteneurs, ceux-ci permettent de faire fonctionner des services / application et rien d'autre que ce dont ils ont besoin pour fonctionner.
Portainer est une extension a Docker qui n'est doncpas nécessaire au bon fonctionnement du service. Elle s'avère utile pour plus de confort puisqu'elle permet un accès à Docker via une interface web