---
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é ou anonyme
+ Permet de monter le filesystem hôte sur celui du container
+ `docker volume`

--

### Examples

+ `docker volume ls`
+ `docker volume create myvolume`
+ `docker run -v myvolume:/data:ro busybox:latest`
+ `docker run -v ./src:/app busybox:latest`

--

### Ports

+ Par défaut, le container est complètement isolé 
+ On peut ouvrir certains ports pour réseaux pour échanger du traffic
+ 


