P08 - Conteneurs : aller plus loin (réseaux Docker, sécurité, Kubernetes)

Prérequis

V05 - Docker (image, conteneur, volume, Compose).


1. Les réseaux Docker

PiloteComportement
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)
hostLe conteneur partage la pile réseau de l’hôte (pas d’isolation)
noneAucun réseau
macvlanLe 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 labo

Docker modifie lui-même les règles iptables : un port publié avec -p 3306:3306 est 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, pas latest en production) ; scanner les vulnérabilités (docker scout, Trivy).
  • Ne pas lancer l’appli en root dans le conteneur (USER dans 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.0

4. 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
ObjetRôle
PodUn ou plusieurs conteneurs liés (la plus petite unité)
Deployment« Je veux 3 copies de ce pod » (mises à jour progressives)
ServiceAdresse stable vers un groupe de pods
IngressEntrée HTTP(S) depuis l’extérieur
ConfigMap / SecretConfiguration et secrets

Pour tester sur ton PC : k3s, kind ou minikube ; commande principale kubectl get pods, kubectl apply -f fichier.yaml.

Voir aussi