165 lines
2.4 KiB
Markdown
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]]
|
|
|
|
|