Aller au contenu

Docker & Containers

Chaque application a son propre dossier dans /docker/ :

/docker/
├── traefik-lr9j/ ← Reverse proxy
├── n8n-rkaf/ ← Automatisation
├── n8n-mcp/ ← Serveur MCP pour Claude Code
├── beszel-p8z2/ ← Monitoring
├── kam/ ← Site Keur Adja Maye
├── kamctrl/ ← Admin réservations
├── suivi/ ← Dashboard monitoring
├── diary/ ← Journal
└── docs/ ← Cette documentation

Chaque dossier contient :

  • docker-compose.yml — définit le service, les volumes, les labels Traefik
  • Dockerfile — si l’image est construite localement (pas pour les services images officielles)
  • .env — variables d’environnement (jamais dans Git pour les secrets)
Fenêtre de terminal
cd /docker/<projet>
# Démarrer (en arrière-plan)
docker compose up -d
# Arrêter
docker compose down
# Redémarrer
docker compose restart
# Rebuilder l'image ET redémarrer
docker compose up -d --build
# Voir les logs en temps réel
docker compose logs -f
Fenêtre de terminal
# Voir tous les containers (actifs + arrêtés)
docker ps -a
# Entrer dans un container (shell interactif)
docker exec -it <nom_container> sh # Alpine
docker exec -it <nom_container> bash # Ubuntu/Debian
# Voir les variables d'environnement d'un container
docker exec <nom_container> env
# Inspecter (réseau, volumes, config complète)
docker inspect <nom_container>

C’est le réseau Docker partagé par tous les containers exposés à internet. Traefik y est connecté et distribue le trafic en lisant les labels de chaque container.

Fenêtre de terminal
# Créer le réseau (fait une seule fois, déjà en place)
docker network create traefik-public
# Lister les containers sur ce réseau
docker network inspect traefik-public --format '{{range .Containers}}{{.Name}} {{end}}'

Chaque docker-compose.yml déclare ce réseau comme externe :

networks:
traefik-public:
external: true

Les labels sont ce qui permet à Traefik de savoir quel domaine envoyer vers quel container. Exemple pour un service sur monapp.levell.cloud :

labels:
- "traefik.enable=true"
- "traefik.http.routers.monapp.rule=Host(`monapp.levell.cloud`)"
- "traefik.http.routers.monapp.entrypoints=websecure"
- "traefik.http.routers.monapp.tls.certresolver=letsencrypt"
- "traefik.http.services.monapp.loadbalancer.server.port=3000"
- "traefik.docker.network=traefik-public"

Le nom monapp dans les labels doit être unique sur tout le serveur (pas de conflit entre projets).

Fenêtre de terminal
# Lister tous les volumes
docker volume ls
# Inspecter un volume (voir où les données sont stockées)
docker volume inspect <nom_volume>
# Les données physiques sont dans :
docker volume inspect <nom_volume>
Fenêtre de terminal
# Lister les images
docker images
# Supprimer les images inutilisées (sans toucher aux containers actifs)
docker image prune -f
# Taille utilisée par Docker
docker system df
Fenêtre de terminal
# 1. Modifier le code dans /docker/<projet>/
# 2. Commiter (le push GitHub est automatique via hook)
cd /docker/<projet>
git add -A
git commit -m "feat: description du changement"
# 3. Rebuilder et redémarrer le container
docker compose up -d --build
# 4. Vérifier que ça tourne
docker ps | grep <nom>
docker logs <nom_container> --tail 20