Files
ObsidianWork/Subjects/Docker.md

165 lines
2.4 KiB
Markdown

---
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]]