--- 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 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"] ``` Mais où est l'OS là dedans ? -- ### Layers ![[Pasted image 20250305180252.png|768]]