P08 - Conteneurs : aller plus loin (réseaux Docker, sécurité, Kubernetes)
Prérequis
V05 - Docker (image, conteneur, volume, Compose).
1. Les réseaux Docker
| Pilote | Comportement |
|---|---|
bridge (défaut) | Réseau privé interne (172.17.0.0/16), NAT vers l’extérieur, ports publiés avec -p |
| bridge personnalisé | Comme bridge, mais avec résolution DNS par nom de conteneur (c’est ce que crée Compose) |
host | Le conteneur partage la pile réseau de l’hôte (pas d’isolation) |
none | Aucun réseau |
macvlan | Le conteneur a sa propre MAC/IP sur le réseau physique |
docker network create --subnet 172.30.50.0/24 labo
docker run -d --name bdd --network labo -e MARIADB_ROOT_PASSWORD=x mariadb:11
docker run -it --rm --network labo debian:13 bash -c "apt-get update -q && apt-get install -y -q iputils-ping && ping -c2 bdd"
docker network inspect laboDocker modifie lui-même les règles iptables : un port publié avec
-p 3306:3306est ouvert même si ufw le bloque. Publier sur localhost seulement :-p 127.0.0.1:3306:3306.
2. Bonnes pratiques de sécurité
- Images officielles et versionnées (
mariadb:11.4, paslatesten production) ; scanner les vulnérabilités (docker scout, Trivy). - Ne pas lancer l’appli en root dans le conteneur (
USERdans le Dockerfile). - Secrets dans des variables / fichiers
.env/ Docker secrets, jamais dans l’image. - Limiter les ressources :
--memory 512m --cpus 1. - Podman : alternative compatible, sans démon et sans root.
3. Registres
Docker Hub, GitHub Container Registry (ghcr.io), registre privé (Harbor, ou registry:2).
docker tag bot-discord:1.0 ghcr.io/pseudo/bot-discord:1.0
docker login ghcr.io
docker push ghcr.io/pseudo/bot-discord:1.04. Kubernetes (aperçu)
Orchestrateur : fait tourner des conteneurs sur plusieurs machines, redémarre ceux qui tombent, répartit la charge, met à jour sans coupure.
flowchart TB CP["Control plane<br/>(API, planificateur)"] --> N1["Nœud 1"] CP --> N2["Nœud 2"] N1 --> P1["Pod web"] & P2["Pod web"] N2 --> P3["Pod web"] & P4["Pod BDD"] SVC["Service (IP stable + répartition)"] --> P1 & P2 & P3 ING["Ingress (HTTP entrant)"] --> SVC
| Objet | Rôle |
|---|---|
| Pod | Un ou plusieurs conteneurs liés (la plus petite unité) |
| Deployment | « Je veux 3 copies de ce pod » (mises à jour progressives) |
| Service | Adresse stable vers un groupe de pods |
| Ingress | Entrée HTTP(S) depuis l’extérieur |
| ConfigMap / Secret | Configuration et secrets |
Pour tester sur ton PC : k3s, kind ou minikube ; commande principale kubectl get pods, kubectl apply -f fichier.yaml.