Notes de Cours - Semaine 1
Le problème classique : "Ça marche sur ma machine !"
Un développeur crée une application qui fonctionne parfaitement sur son ordinateur. Mais lorsque l'application est déployée en production ou partagée avec un collègue, elle plante.
Les deux technologies visent à isoler les applications, mais elles le font différemment.
Une VM émule un ordinateur complet (matériel inclus). Elle exécute un système d'exploitation invité (Guest OS) complet au-dessus d'un système d'exploitation hôte (Host OS) via un hyperviseur.
Un conteneur partage le noyau (kernel) du système d'exploitation hôte. Il n'isole que l'application et ses dépendances (processus, système de fichiers, réseau) en utilisant les fonctionnalités du noyau Linux (cgroups, namespaces).
Docker utilise une architecture client-serveur.
Pour approfondir les concepts de cette semaine, consultez la documentation officielle :
La méthode la plus simple pour Windows et macOS est Docker Desktop. Sur Linux, vous installerez Docker Engine.
Une fois installé, ouvrez un terminal et tapez ces commandes pour vérifier que le client et le daemon fonctionnent :
docker version
Pour obtenir des informations détaillées sur votre installation (nombre d'images, de conteneurs, etc.) :
docker info
L'image `hello-world` est une image de test qui vérifie que tout fonctionne. Elle va :
1. Télécharger l'image `hello-world` depuis Docker Hub (si elle n'existe pas localement).
2. Créer un conteneur à partir de cette image.
3. Exécuter le conteneur, qui affiche un message de confirmation.
4. S'arrêter.
docker run hello-world
Docker Hub est le registre public par défaut, une immense bibliothèque d'images de conteneurs. C'est là que vous (et le daemon Docker) allez chercher les images.
Lorsque vous faites docker run nginx, Docker recherche l'image "nginx" localement. S'il ne la trouve pas, il la télécharge (pull) automatiquement depuis Docker Hub.
N'importe qui peut publier une image sur Docker Hub. Pour la sécurité et la stabilité, il est crucial de savoir quoi utiliser :
Ce sont les meilleures. Maintenues et auditées par Docker et/ou les créateurs du logiciel (ex: python, nginx, mongo). Elles sont sécurisées, à jour, et bien documentées. Toujours les privilégier.
Images publiées directement par l'entreprise qui crée le logiciel (ex: bitnami/mongodb, ubuntu/grafana). C'est une excellente source de confiance, juste après les images officielles.
Ce sont des images de type "Éditeur Vérifié" que Docker et ses partenaires commerciaux promeuvent. Elles sont fiables et sécurisées, mais leur mise en avant fait partie d'un accord commercial.
Images publiées par des utilisateurs individuels (ex: nomutilisateur/mon-app). Elles peuvent être très utiles, mais utilisez-les avec prudence. Vérifiez le Dockerfile, le nombre de téléchargements, et les mises à jour récentes.
Sur le site de Docker Hub, vous pouvez filtrer les résultats de recherche par :
amd64 (standard), arm64 (ex: Apple M1/M2, Raspberry Pi).Lançons un serveur web Nginx qui tourne en arrière-plan et est accessible depuis notre navigateur.
docker run --name mon-serveur-web -d -p 8080:80 nginx
Détails de la commande :
--name mon-serveur-web : Donne un nom lisible à notre conteneur (facultatif mais pratique).-d (detached) : Exécute le conteneur en arrière-plan et affiche l'ID du conteneur.-p 8080:80 (publish) : Mappe le port 8080 de votre machine (hôte) au port 80 à l'intérieur du conteneur (où Nginx écoute).nginx : Le nom de l'image à utiliser.Note de dépannage :
Si http://localhost:8080 ne fonctionne pas, vérifiez que le port 8080 n'est pas déjà utilisé par une autre application sur votre machine. Si c'est le cas, essayez un autre port (ex: -p 8081:80 et visitez http://localhost:8081).
Ouvrez maintenant votre navigateur et allez sur http://localhost:8080.
Vous devriez voir la page d'accueil de Nginx !
Pour arrêter et supprimer le conteneur :
docker stop mon-serveur-web
docker rm mon-serveur-web
docker pull télécharge une image depuis un registre sans la démarrer.
# Télécharge la dernière image nginx
docker pull nginx
docker run est la commande la plus courante. Elle combine plusieurs étapes :
1. Quelle est la différence fondamentale entre une VM et un conteneur ?
2. Quel composant de l'architecture Docker est le "serveur" qui gère les images et les conteneurs ?
3. Quelle commande télécharge une image depuis Docker Hub SANS démarrer de conteneur ?
4. Que signifie le paramètre -p 8080:80 ?