--- date: 2025-03-06 --- # Docker --- ## Virtualisation - VirtualBox - VMWare - VSphere - Proxmox -- ### Architecture ![[Pasted image 20250305170955.png]] -- ### Hyperviseur type 1 (natif) ![[Pasted image 20250305171345.png]] -- ### Hyperviseur type 2 (hosted) ![[Pasted image 20250305171415.png]] -- ### Avantages + Isolation complète + OS / noyau complètement émulés + Tests sur OS spécifiques + Lancer un logiciel non supporté + Environnment reproductible + Image partagée en ISO + Ressources disponibles fixes et programmables --- ## Docker ### arrive -- ### Docker + Emuler un OS + Sur un autre OS + De manière reproductible -- ### VMs vs Containers Les différences ![[Pasted image 20250305172704.png]] + Pas d'hyperviseur + usage direct de l'hôte pour l'émulation + Les outils sont partagés également -- ### Avantages par rapport aux VMs + Légèreté + Moins de choses dans un container que dans un iso + Rapidité + De mise en route, d'exécution et de destruction + containers = VM jetables à la volée + Flexibilité dans l'usage des ressources -- ### Inconvénients par rapport aux VMs + Isolation partielle + Sécurité + Pas de ressources fixes -- ### VM ou container ? #### VM si: + Besoin d'une isolation complète + D'accéder aux éléments intrinsèques d'un OS (kernel, libs, ...) + Usage en ressources prédéfini #### Docker si: + Isolation partielle suffisante + "Juste" besoin d'une machine indépendante + Flexibilité (ressources, network, etc.) -- ### C'est pas tout Docker rend programmable un tas de trucs + Création et le partage d'images + La mise en réseau des containers + Le partage de variables, de filesystem avec l'hôtes + ... --- ## Docker ### Les engrenages --- ## Fonctionnement général ![[Pasted image 20250305175750.png]] --- ## Images + Représentation d'un OS et d'un système de fichier déjà préparé + Moyen principal de partage d'environnement + Template pour les containers + Container = instance d'image -- ### Créer son image Avec un Dockerfile! ```Dockerfile FROM python:3.12 WORKDIR /usr/local/app # Install the application dependencies COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # Copy in the source code COPY src ./src EXPOSE 5000 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"] ``` + `docker build .` + Mais où est l'OS là dedans ? -- ### Images de base -- ### Layers ![[Pasted image 20250305180252.png|768]] -- ### En résumé + Les images décrivent comment créer un container, sur quel OS, etc. + Les images encapsulent et compressent notre application + Partagées et versionnées en layers + Décrites à l'aide d'un Dockerfile + `docker build` pour compiler le Dockerfile en image --- ## Containers -- ### Instance d'image + On peut avoir plusieurs containers qui lancent la même image + C'est même le principe de Kubernetes + Uniques par leur container layer mais c'est tout + `docker run busybox:latest` -- ### Les paramètres d'un container + L'image (obligatoire) et son tag (optionnel) + Les volumes + Les ports + Le network + Et plus encore -- ### Volumes + Espace de stockage persistant + Peut-être nommé