Introduction
Qu'est-ce que Docker et pourquoi l'utiliser pour le self-hosting ?
Docker est un outil permettant de déployer et de gérer des conteneurs. Un conteneur peut être vu comme une petite boîte qui enferme tout ce dont une application a besoin (bibliothèques, dépendances, configurations) pour fonctionner. Le gros atout de Docker c'est que tout est standardisé, ce qui garantit que si ça marche sur votre machine ça marchera (ou presque) partout ailleurs !
Avantages pour un homelab
- Chaque application (conteneur) est isolée, ce qui évite les conflits.
- Déploiement ou retrait de service simplifié, sans perturber les autres.
- Des milliers d'images prêtes à l'emploi sur Docker Hub.
Installation de Docker
Hormis la commande pour les serveurs Linux, vous retrouverez des liens vers les guides officiels pour chaque plateforme afin de garantir des instructions à jour et adaptées à votre système d'exploitation.
Installation sur Linux
Pour installer Docker sur une Linux utilisez cette commande pour une installation automatisée :
curl -fsSL https://get.docker.com | sudo sh
Pour plus d'informations sur l'installation et les plateformes supportées :
Documentation officielle pour Linux
Installation sur Windows
Docker Desktop est l'option idéale pour débuter si vous êtes habitués à Windows et que vous souhaitez essayer sur votre PC plutôt qu'un serveur directement. Il inclut une interface graphique et la compatibilité avec WSL2 (Windows Subsystem for Linux).
Installer Docker Desktop sur Windows
Installation sur macOS
Les utilisateurs de macOS peuvent aussi installer Docker Desktop.
Installer Docker Desktop sur macOS
Tester l'installation
Quelle que soit la plateforme vous pouvez vérifier si Docker est installé correctement en exécutant la commande suivante dans un terminal :
docker run hello-world
Si tout fonctionne vous verrez un message de confirmation comme celui-ci :
Hello from Docker!
This message shows that your installation appears to be working correctly.
Premiers pas avec Docker
Notion d'images et de conteneurs
- Image : Elle contient tout ce qu'il faut pour faire tourner une application : le code, les dépendances et l'environnement nécessaires.
- Conteneur : C'est l'application en cours d'exécution. Lorsqu'on utilise une image, on "crée" un conteneur à partir de celle-ci. L'image reste inchangée et peut être réutilisée pour lancer d'autres conteneurs identiques si nécessaire.
Exemple :
docker run -d -p 8080:80 --name mon-nginx nginx
- On lance le conteneur en arrière-plan grâce à l'option
-d
, sinon ça nous aurait bloqué le terminal en nous affichant les logs de l'application. - On mappe le port
8080
de la machine hôte sur le port80
du conteneur. En l'occurence ça nous permettra d'accéder à Nginx viahttp://<adresse-de-la-machine>:8080
. - On donne un nom au conteneur avec l'option
--name mon-nginx
. Ça facilite sa gestion par la suite (logs, arrêt, suppression, etc.). - On télécharge l'image nginx depuis Docker Hub (si elle n'est pas déjà téléchargé et donc dans votre cache).
Et voilà ! Vous avez déployé votre première application avec Docker en seulement 1 commande !
Utiliser de Docker Hub pour trouver des images
Docker Hub est la bibliothèque officielle d'images Docker où vous pouvez chercher et télécharger des images prêtes à l'emploi pour vos applications.
Qu'est-ce qu'on y trouve ?
- Images officielles : Hébergées directement par les éditeurs des applications, elles garantissent un haut niveau de qualité et de fiabilité.
- Images communautaires : Créées et partagées par des utilisateurs, elles répondent souvent à des besoins spécifiques.
Comment chercher une image ?
- Rendez-vous sur Docker Hub.
- Utilisez la barre de recherche pour trouver une application (par exemple :
nextcloud
,plex
, ouvaultwarden
). - Lisez attentivement la documentation de l'image pour configurer correctement les ports, les volumes, et les variables d'environnement nécessaires.
Vous pouvez aussi retrouver sur Belginux des tutoriels qui vous guideront pas à pas dans leur installation !
Consultez la liste complète ici : Applications Docker
Docker Compose
Qu'est-ce que Docker Compose ?
Docker Compose est un outil qui permet de gérer plusieurs conteneurs à partir d'un fichier de configuration (docker-compose.yml
). Ce fichier décrit les services nécessaires (ex. : base de données, application web) et Compose s'occupe de tout : démarrage, mise en réseau, et dépendances.
Pourquoi utiliser Docker Compose ?
- Gérez plusieurs conteneurs avec une seule commande (
docker compose ...
). - Reproduisez facilement un environnement en gardant / partageant votre fichier
docker-compose.yml
. - Compose peut démarrer les services dans le bon ordre (ex. : d'abord la base de données, puis l'application).
Et bien d'autres, passons à l'installation afin de découvrir tout ça !
Installation et configuration de Docker Compose
- Linux
sudo apt-get install docker compose
- Docker Desktop inclut déjà Docker Compose sur Windows et MacOS, aucune installation supplémentaire n'est nécessaire.
Syntaxe et structure de base d'un fichier docker-compose.yml
Pour reprendre l'exemple de Nginx qu'on à déployé via docker run
vu plus haut :
services:
mon-app:
container_name: mon-nginx
image: nginxdemos/hello
ports:
- "8080:80"
- services: la section où vous listez vos différentes applications.
- mon-app: le nom que vous donnez au service utilisé pour gérer le service dans le contexte de Docker Compose, ça n'affecte pas directement le nom du conteneur une fois lancé.
- container_name: le nom du conteneur est utilisé pour l'environnement Docker.
- image: l'image Docker à utiliser (ici
nginxdemos/hello
, une image Nginx simplifiée qui renvoie un “Hello World”). - ports: liaisons de ports entre la machine hôte et le conteneur (
"8080:80"
signifie que le port 8080 de votre machine est mappé au port 80 du conteneur).
Avec ce fichier, qu'importe le système d'exploitation utilisé, une fois déployé sur Docker vous aurez une page “Hello World” accessible à l'adresse http://[votre_machine]:8080 !
Gestion de plusieurs services
Maintenant passons au concret, Compose brille lorsqu'il faut faire tourner plusieurs conteneurs. Par exemple un serveur web et une base de donnée. Au lieu de taper plusieurs commandes docker run
, vous pouvez définir l'ensemble dans un seul fichier docker-compose.yml
:
services:
web:
image: nginxdemos/hello
ports:
- "80:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypass
POSTGRES_DB: mydb
Ici on a :
- web : un service repenant nos exemple vu plus haut de Nginx.
- db : un service basé sur PostgreSQL, avec quelques variables d'environnement pour la configuration initiale.
Qu'est-ce que la partie environment
?
Le bloc environment
sert à définir des variables d'environnement à l'intérieur du conteneur.
Ces variables permettent de configurer l'application dès son démarrage.
Ici on donne à PostgreSQL :
- le nom de l'utilisateur (
POSTGRES_USER
), - son mot de passe (
POSTGRES_PASSWORD
), - et le nom de la base de données (
POSTGRES_DB
).
Grâce à ça dès que le conteneur démarre cette configuration sera prise en compte.
C'est exactement le même principe que de remplir un fichier .env
avant de lancer une application.
Pour lancer le tout, il suffit d'une seule commande :
docker-compose up -d
Cette commande :
- Télécharge (si nécessaire) les images spécifiées.
- Crée et démarre tous les conteneurs définis dans
docker-compose.yml
. - Tourne en arrière-plan (
-d
) vous laissant la main dans le terminal.
Gérer le stockage et les volumes
Volumes vs bind mounts
Volumes :
Gérés directement par Docker qui les stocke dans un répertoire interne (par exemple /var/lib/docker/volumes
sur Linux).
- Dans vos fichiers
docker-compose.yml
, vous le référencez en tant quemon_volume:/chemin_dans_le_conteneur
.
services:
app:
image: myapp
volumes:
- mon_volume:/data
volumes:
mon_volume:
- Docker gère automatiquement l'emplacement et la logique et c'est pratique pour partager des données entre plusieurs conteneurs (sans forcément connaître le chemin sur l'hôte).
Bind mounts
Fait le lien entre un dossier local sur votre machine hôte et un dossier du conteneur.
- Vous spécifiez l'emplacement exact sur votre machine hôte, par exemple
/home/user/data:/data
.
services:
app:
image: myapp
volumes:
- /home/user/myapp_data:/data
- Vous savez précisément où sont stockées les données, ce qui peut faciliter les sauvegardes ou la consultation des fichiers.
Persistance des données
⚠️ Si vous ne déclarez aucun volume (ou bind mount), chaque conteneur aura un système de fichiers éphémère et donc en cas de suppression ou de recréation du conteneur les données seront perdues !
Bonnes pratiques d'organisation
- Créer un répertoire
docker
où vous le souhaiter, par exemple dans votre dossier personnel (/home/user/docker
). - Classer vos projets :
docker/nextcloud
docker/vaultwarden
docker/plex
- etc.
- Dans chaque dossier de projet, conservez :
- Le fichier
docker-compose.yml
- Un ou plusieurs sous-dossiers pour les données persistantes (ex.
data
,config
,db_data
, etc.) si vous utilisez des bind mounts. - Les fichiers de configuration, notes ou scripts personnalisés associé à votre déploiement.
- Le fichier
- Nommez vos volumes de manière explicite, si vous optez pour des volumes nommés. Par exemple :
monapp_config
monapp_db
- Sauvegarde régulière :
- Si vous utilisez des bind mounts, il vous suffit de copier les dossiers locaux pour les sauvegarder.
- Si vous utilisez des volumes Docker, vous pouvez faire un
docker run --rm -v mon_volume:/data -v /backup:/backup ubuntu tar cvf /backup/mon_volume.tar /data
pour en extraire le contenu.
Cette organisation vous permettra de garder des dossiers clairs et de gérer facilement la sauvegarde et la restauration de chacun de vos services.
Réseaux et exposition de services
Différents types de réseau
-
Bridge (par défaut) :
- Crée un réseau virtuel isolé pour vos conteneurs.
- Les conteneurs peuvent communiquer entre eux sur ce réseau en utilisant leurs noms ou adresse IP (privilégier l'utilisation du nom si addresse ip non fixé).
- Utilisé pour la plupart des cas d'usage.
Exemple :
docker network create mon_reseau docker run --network mon_reseau --name conteneur1 nom_image docker run --network mon_reseau --name conteneur2 nom_image
Les conteneurs
conteneur1
etconteneur2
pourront communiquer via leurs noms. -
Host :
- Le conteneur partage directement le réseau de l'hôte sans isolation ! ⚠️
- Utile pour des applications nécessitant des performances réseau élevées ou des ports spécifiques.
- Peu recommandé pour des raisons de sécurité sauf pour des besoins spécifiques.
Exemple :
docker run --network host nom_image
-
None :
- Le conteneur n'est connecté à aucun réseau.
- Utile pour des conteneurs qui n'ont pas besoin de communication réseau.
Exemple :
docker run --network none nom_image
Il existe aussi d'autres types de réseaux plus avancés comme Overlay et Macvlan, pour des cas spécifiques comme les architectures distribuées ou les besoins réseau particuliers. Docker Engine - Networking
Exposition de services
Par défaut les conteneurs ne sont pas accessibles depuis l'extérieur. Pour exposer un service vous devez utiliser l'option -p
ou --publish
.
Exemple :
docker run -p 8080:80 nom_image
-
Associe le port 8080 de l'hôte au port 80 du conteneur.
-
Si vous utilisez Docker Compose, définissez les ports dans le fichier
docker-compose.yml
:
services:
web:
image: nginx
ports:
- "8080:80"
Exemple complet et réaliste d'un fichier docker-compose.yml
Afin de récapituler tout se que nous avons vu précemment, voici un exemple plus complet et réaliste qui comprend une application web (via un serveur Nginx), une base de données (MySQL) et un serveur Nginx agissant comme reverse proxy. Les trois services organisés avec Docker Compose :
services:
# Service de l'application Web (WebApp)
webapp:
image: nginxdemos/hello
container_name: webapp
ports:
- "8080:80" # Expose le port 80 du conteneur sur le port 8080 de l'hôte
networks:
- app-network
depends_on:
- db # Assure que la base de données soit lancée avant l'application
# Service de la base de données (MySQL)
db:
image: mysql:5.7 # Ici on choisit la version 5.7 en rajoutant ":5.7" derrière le nom de l'image, on appel ça un tag
container_name: mysql-db
environment:
MYSQL_ROOT_PASSWORD: examplepassword # Mot de passe root pour MySQL
MYSQL_DATABASE: appdb # Nom de la base de données à créer
MYSQL_USER: user # Utilisateur pour la base de données
MYSQL_PASSWORD: userpassword # Mot de passe de l'utilisateur
volumes:
- db-data:/var/lib/mysql # Persistance des données dans un volume
networks:
- app-network
# Service Nginx (Reverse Proxy)
nginx:
image: nginx:latest # latest correspond à la toute dernière version disponible
container_name: nginx-proxy
ports:
- "80:80" # Expose le port 80 du conteneur sur le port 80 de l'hôte
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf # Fichier de configuration Nginx personnalisé
depends_on:
- webapp
networks:
- app-network
# Définition du réseau interne
networks:
app-network:
driver: bridge
# Volumes pour persister les données de la base de données sinon elles seront perdues au redémarrage du conteneur
volumes:
db-data:
Explication de la structure du fichier
-
Services :
- webapp : Le service de l'application web (ici un serveur Nginx qui renvoie une page “Hello World”).
- image : L'image Docker utilisée pour ce service (
nginxdemos/hello
). - ports : Le port 8080 de votre machine est mappé sur le port 80 du conteneur.
- depends_on : Assure que la base de données (
db
) soit lancée avant l'application.
- image : L'image Docker utilisée pour ce service (
- db : Le service de la base de données MySQL.
- image : Utilisation de l'image officielle MySQL (
mysql:5.7
). - environment : Variables d'environnement pour la configuration de la base de données (mot de passe, utilisateur, etc.).
- volumes : Le volume
db-data
est utilisé pour persister les données de MySQL (les données ne seront pas perdues si le conteneur est arrêté ou supprimé).
- image : Utilisation de l'image officielle MySQL (
- nginx : Le service Nginx qui servira de reverse proxy pour l'application web.
- image : L'image officielle Nginx.
- volumes : Un fichier de configuration Nginx personnalisé peut être monté.
- depends_on : Ce service dépend de
webapp
, donc il s'assurera que l'application web soit prête avant de démarrer.
- webapp : Le service de l'application web (ici un serveur Nginx qui renvoie une page “Hello World”).
-
Réseaux :
- app-network : Tous les services partagent un réseau interne (
bridge
), ce qui leur permet de communiquer entre eux de manière isolée des autres déploiements.
- app-network : Tous les services partagent un réseau interne (
-
Volumes :
- db-data : Volume persistant pour la base de données MySQL.
Stratégies de redémarrage
Vous pouvez définir une politique de redémarrage dans le docker-compose.yml
:
services:
web:
image: nginx
ports:
- "8080:80"
restart: unless-stopped
Voici les options principales :
- always : le conteneur redémarre systématiquement, même s'il a été interrompu manuellement.
- unless-stopped : le conteneur redémarre automatiquement, sauf si vous l'avez explicitement arrêté.
- no (par défaut) : pas de redémarrage automatique, le conteneur reste à l'arrêt s'il plante ou si le système redémarre.
- on-failure : le conteneur redémarre uniquement s'il s'arrête avec un code d'erreur (un échec). Si vous l'arrêtez manuellement ou s'il se termine normalement, il ne redémarrera pas.
Docker Compose offre de nombreux autres paramètres utiles à explorer, tels que la limitation des ressources (CPU, RAM, etc) pour chaque conteneur par exemple. L'objectif ici est de vous fournir une base solide pour démarrer vos déploiements. Vous découvrirez ces options au fur et à mesure de vos expérimentations et en consultant la documentation des applications qui en auront réellement besoin.
Sécurité et bonnes pratiques en homelab
Mises à jour régulières
- Docker et Docker Compose :
- Sur Linux, vérifiez régulièrement vos dépôts (
sudo apt-get update && sudo apt-get upgrade docker-ce docker-ce-cli containerd.io
). - Sur Windows/macOS, Docker Desktop propose un système de mise à jour intégré.
- Vos images conteneurs :
- Vous pouvez automatiser la mise à jour de vos conteneurs via l'outil Watchtower. (un article est disponible : Surveiller les mises à jour des conteneurs Docker avec Watchtower)
- Le système hôte :
- Gardez votre OS à jour (correctifs de sécurité, nouveau kernel, etc.).
- Sur Linux :
sudo apt-get update && sudo apt-get upgrade
(ou équivalent sur votre distribution).
Droits utilisateurs
- Évitez d'exécuter vos conteneurs en root quand c'est possible. Si un conteneur tourne avec des privilèges élevés et qu'il est compromis, l'attaquant peut potentiellement accéder à des ressources sensibles sur l'hôte.
- Sur l'hôte, ajoutez votre utilisateur au groupe
docker
(sous Linux) pour éviter d'employersudo
en permanence :
sudo usermod -aG docker <votre_nom_d_utilisateur>
Reconnectez-vous pour que les changements prennent effet.
Sauvegarde et restauration des données
- Identifier vos données critiques, les dossiers ou volumes qui contiennent réellement vos fichiers importants (configurations, bases de données, etc.).
- Backups réguliers :
- Si vous utilisez des bind mounts, il suffit de copier le dossier local :
tar -czvf mon_backup.tgz /chemin/vers/mon_projet
- Si vous utilisez des volumes Docker, vous pouvez exécuter un conteneur temporaire pour copier le contenu :
docker run --rm -v mon_volume:/data -v /backup:/backup ubuntu \
tar czvf /backup/mon_volume_backup.tgz /data
- Restauration :
-
Pour un bind mount, il suffit de décompresser l'archive à l'emplacement adéquat avant de relancer vos conteneurs.
-
Pour un volume Docker, créez d'abord le volume puis extrayez votre archive dans ce volume avec le même principe (un conteneur temporaire).
Gestion des secrets et variables d'environnement
- Variables d'environnement : Vous pouvez définir vos paramètres (mots de passe, API keys, etc.) dans un fichier
.env
à la racine de votre projet (où se trouve le fichier docker-compose.yml) puis les référencer dans ledocker-compose.yml
:
# fichier .env
MYSQL_ROOT_PASSWORD=monMotDePasseSecret
services:
db:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
-
Docker secrets : Méthode plus sécurisée mais un peu plus avancée, surtout utile si vous utliser Docker Swarm. Pour un usage homelab simple, le
.env
suffit largement, mais à condition de bien protéger ce fichier (droits de lecture, pas de dépôt Git public, etc.). -
S'assurez que le
.env
n'est lisible que par vous :
chmod 600 .env
Restreindre la communication entre les conteneurs
Par défaut Docker crée un réseau de type bridge où tous les conteneurs déployer sans configuration réseau spécifié peuvent communiquer. Il est fréquent de voir tous les conteneurs sur le même réseau, alors que beaucoup n'ont pas besoin d'échanger entre eux. Le but est donc de limiter la communication non nécessaire entre conteneurs, afin de réduire les risques si l'un d'eux est compromis (moins de propagation possible).
Comment faire ?
- Dans votre
docker-compose.yml
, vous pouvez définir plusieurs réseaux :
services:
web:
image: nginxdemos/hello
networks:
- front_net
db:
image: postgres:latest
networks:
- back_net
# Définition des réseaux
networks:
front_net:
back_net:
- Ici
web
etdb
se trouvent sur des réseaux différents, ce qui empêchedb
d'accéder automatiquement àweb
et inversement, à moins que vous le configuriez explicitement.
En segmentant ainsi vos services, vous évitez qu'un conteneur compromis puisse “voir” ou attaquer d'autres conteneurs sans aucune raison de communiquer.
Ne pas exposer inutilement les ports de conteneurs
Lorsqu'un reverse proxy est en place (Nginx, Traefik, Caddy, etc.), vous n'avez souvent pas besoin d'exposer tous les ports de vos conteneurs vers l'extérieur. Ça évite de multiplier les points d'entrée et réduit la surface d'attaque de votre homelab.
-
Limiter le mappage de ports :
- Dans un fichier
docker-compose.yml
, n'ouvrez que le port strictement nécessaire pour votre reverse proxy. - Par exemple, si votre reverse proxy intercepte le trafic sur le port 80/443 et achemine les requêtes vers vos différents services en interne, inutile d'exposer d'autres ports.
- Dans un fichier
-
Réduire la surface d'attaque :
- Moins de ports ouverts = moins de possibilités pour un attaquant de scanner et d'exploiter une vulnérabilité.
- Les services qui n'ont pas besoin d'être accessibles directement depuis l'extérieur sont accessible uniquement à travers le reverse-proxy permettant de centraliser les sécurité sur ce point d'entrée.
-
Configuration du reverse proxy :
- Le reverse proxy reçoit toutes les requêtes externes et les redirige vers le bon conteneur en fonction du nom de domaine ou du chemin de l'URL.
- Ça permet une gestion centralisée des certificats SSL, de l'authentification, et simplifie la maintenance.
Introduction courte à l'utilisation d'un reverse proxy
Pour exposer plusieurs applications sur un même nom de domaine, on utilise un reverse proxy comme Cosmos-Cloud, Nginx Proxy Manager, Caddy ou Traefik, il en existe pour tout les types de besoin. Dans notre exemple il se place devant vos conteneurs et gère le routage des requêtes vers lui sans qu'il ne soit directement exposé lui-même.
Si vous débuter, Cosmos-Cloud prend en charge toutes les bonnes pratiques de sécurité mentionnés précédemment et bien d'autres, telles que l'authentification multi-facteurs, la protection contre les attaques DoS/DDOS, etc. Il simplifie également la gestion des conteneurs Docker et fournit une interface web pour tout ça !
Retrouvez un guide complet sur le déploiement de Cosmos-Cloud ici.
Surveillance, logs et mises à jour
Commandes de base pour la supervision
- Voir les journaux de votre conteneur
docker logs <nom_du_conteneur>
- Affiche tout l'historique des logs produits par le conteneur, pratique pour diagnostiquer des erreurs ou vérifier que tout se lance correctement.
- Observer les logs en temps réel
docker logs -f <nom_du_conteneur>
- L'option
-f
(pour follow) permet de suivre les logs au fur et à mesure qu'ils sont générés.
- Surveiller la consommation CPU/mémoire
docker stats
- Affiche en temps réel l'utilisation des ressources par chaque conteneur (CPU, RAM, I/O…).
Débogage
Outils et commandes d'inspection
- Inspecter un conteneur
docker inspect <nom_du_conteneur>
-
Affiche une réponse contenant toutes les informations relatives au conteneur : les configurations réseau, l'état actuel, les volumes montés, les variables d'environnement, etc.
-
Très utile pour comprendre la configuration de votre conteneur (par ex. si un volume n'est pas monté correctement ou si le mapping réseau n'est pas celui que vous attendiez).
- Surveiller les événements Docker
docker events
- Montre en temps réel les événements qui se produisent : lancement d'un conteneur, arrêt, création d'images, etc.
Conclusion
Les points clés à retenir
- Docker permet de déployer et gérer vos applications dans des conteneurs isolés, garantissant flexibilité, portabilité et simplicité.
- Docker Compose facilite la gestion d'environnements multi-conteneurs grâce à un fichier de configuration.
- Les bonnes pratiques comme l'utilisation de volumes, la sécurisation des réseaux et la limitation des ports exposés sont essentielles pour un homelab organisé et augmenter sa sécurité.
- On ne le répétera jamais assez mais La mise à jour régulière des conteneurs et du système hôte est cruciale pour éviter les failles de sécurité.
Ressources utiles et communautés
- Documentation officielle Docker
- Docker Hub : Images officielles et communautaires.
- Forum Docker
- r/docker : Pour poser vos questions et suivre les actualités Docker.
- r/selfhosted : Pour discuter de projets et outils en self-hosting.
Et voilà, vous avez désormais un aperçu global de Docker et Docker Compose pour héberger vos applications préférées dans votre homelab. J'espère que ce guide vous permettra de prendre un bon départ dans le monde passionnant du self-hosting. Maintenant, c'est à vous de jouer !
En bonus, voici une liste des commandes essentielle sur Docker, pratique non ? 😊
Belginux Docker Cheat Sheet
Commande | Description | Exemple |
---|---|---|
Images | ||
docker pull <image> |
Télécharge l'image depuis un registre (Docker Hub par défaut) | docker pull nginx:latest |
docker images |
Liste les images présentes en local | |
docker rmi <image_id> |
Supprime une image (id ou nom) | docker rmi nginx:latest |
Conteneurs | ||
docker run <options> <image> |
Lance un conteneur à partir d'une image | docker run -d -p 80:80 --name mon_nginx nginx:latest |
docker ps |
Liste les conteneurs en cours d'exécution | |
docker ps -a |
Liste tous les conteneurs, y compris ceux arrêtés | |
docker stop <nom/ID> |
Stoppe un conteneur | docker stop mon_nginx |
docker rm <nom/ID> |
Supprime un conteneur (il doit être arrêté) | docker rm mon_nginx |
docker exec -it <nom/ID> bash |
Exécute un shell (bash) ou toute autre commande dans un conteneur | docker exec -it mon_nginx bash |
Logs & Stats | ||
docker logs <nom/ID> |
Affiche les logs d'un conteneur | docker logs mon_nginx |
docker logs -f <nom/ID> |
Suivre les logs en temps réel | docker logs -f mon_nginx |
docker stats |
Affiche l'utilisation des ressources (CPU, RAM, etc.) par les conteneurs | |
Volumes | ||
docker volume create <nom> |
Crée un volume nommé | docker volume create mon_volume |
docker volume ls |
Liste tous les volumes disponibles | |
docker volume rm <nom> |
Supprime un volume (il doit être inutilisé) | docker volume rm mon_volume |
Networks | ||
docker network create <nom> |
Crée un réseau Docker | docker network create mon_reseau |
docker network ls |
Liste tous les réseaux | |
docker network rm <nom> |
Supprime un réseau (il doit être inutilisé) | docker network rm mon_reseau |
Inspection & Debug | ||
docker inspect <nom/ID> |
Affiche un JSON détaillé sur un objet (conteneur, image, volume, etc.) | docker inspect mon_nginx |
docker events |
Affiche en temps réel les événements Docker (arrêts, démarrages, etc.) | |
Gestion générale | ||
docker system df |
Affiche l'espace disque utilisé par Docker (images, conteneurs, volumes) | |
docker system prune |
Supprime tous les objets inutilisés (images, conteneurs, réseaux…) | docker system prune -a (pour forcer la suppression de toutes les images non utilisées) |
Docker Compose | ||
docker-compose up -d |
Lance tous les services définis dans un fichier docker-compose.yml en mode détaché |
|
docker-compose down |
Arrête et supprime les conteneurs et réseaux créés par Compose | |
docker-compose pull |
Met à jour les images définies dans le fichier docker-compose.yml |
|
docker-compose logs -f |
Affiche et suit les logs de tous les services lancés par Compose |