Docker pratiques
| Fiche express | |
|---|---|
| Type | Recueil de commandes et pratiques d'exploitation Docker |
| Thèmes | Nettoyage · variables d'environnement · export/import d'images · audit sécurité · réseau |
| Voir aussi | Docker daemon.json · Docker socket · Docker users · Systemd |
Cette page rassemble des commandes et réglages d'exploitation courants qui ne justifient pas chacun une page dédiée : nettoyage des ressources inutilisées, gestion des variables d'environnement, export/import d'images, audit de sécurité de l'hôte et du démon, et exposition ponctuelle de l'API sur le réseau.
Nettoyage courant
# Suppression forcée d'un conteneur (même en cours d'exécution)
docker rm -f <conteneur>
# Suppression de tous les conteneurs, actifs ou non
docker rm -f $(docker ps -aq)
# Suppression d'une image
docker rmi <image>
# Nettoyage global des ressources inutilisées (conteneurs arrêtés,
# réseaux orphelins, images sans tag, cache de build)
docker system prune
docker system prune ne touche pas aux volumes par défaut ; ajouter --volumes si un nettoyage plus agressif est souhaité (attention aux données qui ne seraient pas sauvegardées ailleurs).
Variables d'environnement
# Variable unique en ligne de commande
docker run -tid --name c1 --env PASSWORD=changeme ubuntu:latest
# Fichier d'environnement (une variable par ligne, KEY=VALUE)
docker run -tid --name c1 --env-file myfile_env.txt ubuntu:latest
Passer un secret en clair via --env ou --env-file l'expose dans docker inspect et dans les journaux d'audit du démon : pour un usage en production, préférer un mécanisme de secrets dédié (Docker secrets en mode swarm, Vault — voir Vault —, ou l'intégration secrets de l'orchestrateur utilisé).
Options diverses au lancement
docker run -tid --name c1 --hostname monhostpersonnalise ubuntu:latest
Export et import d'images
# Sauvegarder une image en fichier tar
docker save -o dir/nom-image.tar <registre>/<image>:<version>
# Restaurer une image depuis un fichier tar
docker load -i fichier.tar
Utile pour transférer une image vers un environnement sans accès direct à un registre (réseau isolé, air-gap).
Audit de sécurité de l'hôte Docker
Le projet docker-bench-security exécute une série de vérifications inspirées du CIS Benchmark Docker (configuration du démon, permissions de fichiers, isolation des conteneurs, etc.) :
docker run -it --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /var/lib:/var/lib \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/lib/systemd:/usr/lib/systemd \
-v /etc:/etc --label docker_bench_security \
docker/docker-bench-security
Le conteneur reçoit volontairement des accès très larges à l'hôte (namespaces réseau/PID/utilisateur, socket Docker, arborescences systemd et /etc) : c'est nécessaire pour qu'il puisse inspecter la configuration réelle du système, mais cela en fait un outil à réserver à un lancement ponctuel et contrôlé, pas à un service permanent. Voir Docker trust pour le détail de DOCKER_CONTENT_TRUST.
Exposer temporairement l'API sur le réseau (sans TLS)
Pour un test local rapide, il est possible d'ajouter un listener TCP en plus du socket UNIX, via un fichier drop-in systemd :
sudo vim /etc/systemd/system/docker.service.d/startup_options.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
sudo systemctl daemon-reload
sudo systemctl restart docker
# Test
docker -H tcp://127.0.0.1:2375 ps
Le port 2375 ainsi ouvert n'est ni chiffré ni authentifié : équivalent à un accès root sans mot de passe pour quiconque peut l'atteindre. À réserver strictement à une boucle locale ou un réseau isolé — pour un accès distant, voir la procédure TLS complète dans Docker socket.
Modifier la plage IP du pont par défaut
Référence : https://docs.docker.com/v17.09/engine/userguide/networking/default_network/custom-docker0/
vi /etc/docker/daemon.json
{
"bip": "172.20.0.1/24"
}
systemctl daemon-reload
service docker restart
En cas de besoin, l'interface docker0 peut être supprimée manuellement (elle sera recréée par Docker au redémarrage suivant) :
ip link del docker0
Voir aussi Docker daemon.json pour l'ensemble des clés de configuration du démon.