- Approfondir ses connaissances sur la conteneurisation et Docker.
- Comprendre les enjeux de la conteneurisation.
- Répondre aux questions écrites dans un fichier de rendu
- Captures d’écran ou extraits de commandes pour justifier vos résultats
Nous avons déjà vu ce qu’est un conteneur et comment il se différencie d’une machine virtuelle (VM).
Rappel rapide :
- Conteneur : regroupe une application et ses dépendances, partage le noyau de l’hôte, démarrage très rapide.
- VM : exécute un OS complet au-dessus d’un hyperviseur, plus lourd.
Un conteneur se situe entre l’application (plus ses bibliothèques) et le noyau de l’hôte. Il n’y a pas de second noyau comme dans une VM. Visuellement :
+-------------------------+ +-------------------------+
| Application A | | Application B |
| +-------------------+ | | +-------------------+ |
| | Dependencies | | | | Dependencies | |
+--|-------------------|--+ +--|-------------------|--+
| Conteneur Runtime | | Conteneur Runtime |
+-------------------+ +-------------------+
| |
------ OS Kernel (Host) -----
|
Hardware
Chaque conteneur est isolé, mais le noyau (kernel) est mutualisé.
- Les conteneurs utilisent des namespaces et des cgroups pour s’isoler (processeur, mémoire, réseau).
- Namespace : permet de créer des environnements isolés (PID, réseau, utilisateur, etc.).
- Cgroups : contrôle les ressources allouées à un processus (CPU, mémoire, I/O).
- Ils partagent donc le même kernel que l’OS hôte.
- Un kernel : c’est le cœur de l’OS, qui gère les ressources matérielles et fournit des services aux applications.
- Windows : noyau NT, Linux : noyau Linux, macOS : noyau XNU.
- Un crash du kernel affecte tous les conteneurs, mais un plantage d’appli dans un conteneur ne contamine pas les autres.
- Sécurité : chaque conteneur est isolé, mais attention aux failles partagées du kernel.
- Exemple : une faille de sécurité dans le kernel Linux affecte tous les conteneurs tournant sur ce kernel.
- Surveillance et journalisation : Docker fournit une commande
docker logs
qui affiche les logs d’un conteneur.- Exercice rapide : Lancez un conteneur Nginx et utilisez
docker logs nom_du_conteneur
pour voir son output.
- Exercice rapide : Lancez un conteneur Nginx et utilisez
Lancer un conteneur Nginx qui s'appelle "monsite" et voir les logs :
docker run -d --name monsite -p 80:80 nginx:alpine
docker logs monsite
- Gestion et visibilité des coûts (brièvement) : moins de surcharge qu’une VM, meilleure densité de services sur une même machine.
- Orchestration / Mise à l’échelle (brièvement) : quand on a beaucoup de conteneurs, on utilise des orchestrateurs (Docker Swarm, Kubernetes) pour automatiser le déploiement.
- Les plateformes Cloud (AWS, GCP, Azure) proposent des services conteneurisés.
- AWS : Elastic Container Service (ECS), Elastic Kubernetes Service (EKS).
- GCP : Google Kubernetes Engine (GKE).
- Azure : Azure Kubernetes Service (AKS).
- Permet de déployer facilement des conteneurs et de les scaler automatiquement.
Exercice :
- Trouver combien coûte un conteneur de type
f1-micro
sur GCP par jour. - Trouver combien coûte un conteneur de type
t2.micro
sur AWS par jour. - Comparer les deux prix par rapport à une offre dédiée ou un VPS.
- Quels sont les avantages et inconvénients de chaque solution ?
- Une image est une “snapshot” contenant tout le nécessaire pour exécuter une application (fichiers, dépendances).
- Un conteneur est une instance en cours d’exécution d’une image.
- Un peu comme le parallèle Class / Object en programmation orientée objet.
- Chaque instruction dans un
Dockerfile
crée une couche intermédiaire. - Docker réutilise ces couches (mise en cache) pour accélérer les builds.
- Exemple :
Changer
FROM nginx:alpine # couche 1 COPY index.html /usr/share/nginx/html # couche 2
index.html
modifie seulement la couche 2, la couche 1 reste en cache.
Exercice layers
- Créez un Dockerfile avec 2-3 instructions (ex.
FROM ubuntu
,RUN apt-get update && apt-get install -y curl
,echo "Hello" > myfile
),COPY myfile /tmp
.- Construisez l’image (
docker build -t monimage:v1 .
).- Modifiez un petit fichier (myfile) et rebuild. Observez les logs pour voir quelles couches sont reconstruites.
Voici un rappel des principales commandes :
Commande | Description |
---|---|
docker build | Construit une image Docker depuis un Dockerfile. |
docker run | Lance un conteneur depuis une image. |
docker search | Recherche des images sur Docker Hub. |
docker images | Liste les images locales. |
docker info | Affiche les informations sur le daemon Docker. |
docker logs | Affiche les logs d’un conteneur. |
docker container ls | Liste les conteneurs (actif ou non avec -a ). |
docker ps | (Alias de docker container ls ) |
docker stop / kill | Arrête / tue un conteneur. |
docker rm | Supprime un conteneur. |
docker rmi | Supprime une image locale. |
docker prune | Nettoie les ressources (conteneurs, volumes, images) non utilisées. |
Le registry Docker Hub contient des milliers d’images prêtes à l’emploi.
- Exemple :
docker pull nginx:alpine docker run -d -p 80:80 nginx:alpine
docker pull
télécharge l’imagenginx:alpine
.docker run
la lance sur le port 80 de la machine hôte.
Une image Docker est créée à partir d’un fichier Dockerfile
qui contient les instructions pour construire l’image.
Une fois l’image créée, on peut déployer un conteneur depuis cette image. Sans Dockerfile, on ne peut pas créer d’image.
-
Chaque ligne représente une instruction (FROM, RUN, COPY, CMD, etc.).
-
Exemple minimal :
FROM nginx:alpine COPY index.html /usr/share/nginx/html
- FROM : point de départ (image de base).
- COPY : copie un fichier local dans l’image.
- Dans le même dossier que votre
Dockerfile
, tapez :docker build -t webserver-image:v1 .
-t
donne un nom et une version..
indique le contexte de build (dossier courant).
- Lancez :
docker run -d -p 8080:80 webserver-image:v1
- Accédez à
http://localhost:8080
pour voir votre page HTML.
- Supprimer un conteneur :
docker rm monConteneur
- Supprimer une image :
docker rmi monImage
- Prune :
docker system prune
(oudocker image prune
,docker container prune
) pour faire le ménage.
Dans ce cours, vous avez :
- Compris l’architecture d’un conteneur et son lien avec le système d’exploitation.
- Survolé les enjeux de la conteneurisation (sécurité, logs, coûts, orchestration).
- Vu comment Docker s’intègre aux plateformes Cloud.