Sécurité Docker
Un container n'est pas une VM. L'isolation repose sur des mécanismes noyau qui ont une surface d'attaque. Durcir un container n'est pas optionnel en production — c'est la base.
Utilisateur non-root
# Créer un utilisateur dédié
RUN groupadd -r appuser && useradd -r -g appuser appuser
# Changer de propriétaire sur les fichiers
COPY --chown=appuser:appuser . /app
# Basculer sur cet utilisateur
USER appuser# Forcer un UID au runtime (utile si l'image n'a pas d'USER)
docker run -u 1000:1000 myapp:latest
# Vérifier l'UID du processus dans le container
docker exec myapp idFilesystem en lecture seule
docker run -d --read-only --tmpfs /tmp:size=64m --tmpfs /run:size=16m myapp:latestLe flag --read-only monte le filesystem racine en lecture seule. Les répertoires temporaires nécessitant des écritures sont montés en tmpfs. Un attaquant qui compromet le container ne peut pas modifier les binaires.
Capabilities Linux
# Retirer toutes les capabilities, n'ajouter que le strict nécessaire
docker run -d --cap-drop ALL --cap-add NET_BIND_SERVICE nginx:alpinePar défaut, Docker accorde une dizaine de capabilities. Les applications web n'en ont besoin d'aucune en général. NET_BIND_SERVICE permet de binder sur les ports < 1024.
Profils seccomp
# Profil par défaut : bloque ~44 syscalls potentiellement dangereux
# Voir /usr/share/doc/docker.io/examples/seccomp.json
# Profil strict personnalisé
docker run -d --security-opt seccomp=/path/to/profil.json myapp:latest
# Désactiver seccomp (déconseillé)
docker run -d --security-opt seccomp=unconfined myapp:latestno-new-privileges
# Empêche l'escalade de privilèges via setuid/setgid
docker run -d --security-opt no-new-privileges:true myapp:latestAppArmor
# Profil AppArmor par défaut : docker-default (chargé automatiquement)
docker run -d --security-opt apparmor=docker-default nginx:alpine
# Charger un profil custom
apparmor_parser -r /etc/apparmor.d/docker-myapp
docker run -d --security-opt apparmor=docker-myapp myapp:latestAudit et scanning
# Trivy : scan de vulnérabilités des images
trivy image myapp:latest
trivy image --severity HIGH,CRITICAL myapp:latest
# Docker Scout (intégré à Docker Desktop et Docker Hub)
docker scout cves myapp:latest