Docker - L'essentiel
Docker

Docker - L'essentiel

Table des matières

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 port 80 du conteneur. En l'occurence ça nous permettra d'accéder à Nginx via http://<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 ?

  1. Rendez-vous sur Docker Hub.
  2. Utilisez la barre de recherche pour trouver une application (par exemple : nextcloud, plex, ou vaultwarden).
  3. 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 ?

  1. Gérez plusieurs conteneurs avec une seule commande (docker compose ...).
  2. Reproduisez facilement un environnement en gardant / partageant votre fichier docker-compose.yml.
  3. 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 :

  1. Télécharge (si nécessaire) les images spécifiées.
  2. Crée et démarre tous les conteneurs définis dans docker-compose.yml.
  3. 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 que mon_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

  1. Créer un répertoire docker où vous le souhaiter, par exemple dans votre dossier personnel (/home/user/docker).
  2. Classer vos projets :
    • docker/nextcloud
    • docker/vaultwarden
    • docker/plex
    • etc.
  3. 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.
  4. Nommez vos volumes de manière explicite, si vous optez pour des volumes nommés. Par exemple :
    • monapp_config
    • monapp_db
  5. 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

  1. 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 et conteneur2 pourront communiquer via leurs noms.

  2. 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
    
  3. 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

  1. 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.
    • 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é).
    • 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.
  2. 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.
  3. 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

  1. 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é.
  1. Vos images conteneurs :
  1. 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'employer sudo en permanence :
sudo usermod -aG docker <votre_nom_d_utilisateur>

Reconnectez-vous pour que les changements prennent effet.

Sauvegarde et restauration des données

  1. Identifier vos données critiques, les dossiers ou volumes qui contiennent réellement vos fichiers importants (configurations, bases de données, etc.).
  2. 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
  1. 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 le docker-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 ?

  1. 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:
  1. Ici web et db se trouvent sur des réseaux différents, ce qui empêche db 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.

  1. 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.
  2. 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.
  3. 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

  1. 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.
  1. 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.
  1. 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

  1. 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).

  1. 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

  1. Docker permet de déployer et gérer vos applications dans des conteneurs isolés, garantissant flexibilité, portabilité et simplicité.
  2. Docker Compose facilite la gestion d'environnements multi-conteneurs grâce à un fichier de configuration.
  3. 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é.
  4. 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

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

Komi

Passionnée par le self-hosting et tout ce qui gravite autour, je partagerais ici mes découvertes et guides pour aider chacun à se sentir à l’aise dans cet univers.