1. Options docker run essentielles
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d, --detach # Mode arriĂšre-plan
-i, --interactive # Garder STDIN ouvert
-t, --tty # Allouer un pseudo-TTY
--name # Nommer le conteneur
--rm # Supprimer Ă l'arrĂȘt
--restart # no | on-failure | always | unless-stopped
--memory 512m # Limiter la mémoire
--cpus 1.5 # Limiter le CPU
--read-only # SystĂšme de fichiers read-only
--user 1000:1000 # Utilisateur:groupe
Exemples combinés
# Web server nginx avec restart auto
docker run -d \
--name nginx \
--restart unless-stopped \
--memory 256m \
-p 80:80 \
nginx:alpine
# Shell interactif temporaire
docker run -it --rm ubuntu:22.04 bash
2. Ports & Réseau
# Mapping basique
-p 8080:80 # hĂŽte:conteneur
-p 127.0.0.1:8080:80 # lier seulement localhost
-p 3000 # port alĂ©atoire hĂŽte â 3000
-P # tous les EXPOSE â ports alĂ©atoires
# Voir les ports mappés
docker port mon-conteneur
# Exemples
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=secret postgres
docker run -d -p 6379:6379 redis:7-alpine
docker run -d -p 8080:3000 monapp:latest
3. Variables d'environnement
# Passer une variable
docker run -e NODE_ENV=production monapp
# Plusieurs variables
docker run \
-e DATABASE_URL=postgres://user:pass@db:5432/app \
-e REDIS_URL=redis://redis:6379 \
-e JWT_SECRET=supersecret \
monapp
# Depuis un fichier .env
docker run --env-file .env monapp
# Contenu .env
NODE_ENV=production
PORT=3000
DATABASE_URL=postgres://...
4. exec & logs
docker exec
# Ouvrir un shell interactif
docker exec -it mon-app bash
# Exécuter une commande unique
docker exec mon-app ls -la /app
# En tant qu'un utilisateur spécifique
docker exec -u root -it mon-app bash
# Définir des variables d'env pour la session
docker exec -e DEBUG=1 -it mon-app bash
docker logs
docker logs mon-app # Tous les logs
docker logs -f mon-app # Suivre en temps réel
docker logs --tail 50 mon-app # 50 derniĂšres lignes
docker logs --since 10m mon-app # Depuis 10 minutes
docker logs -t mon-app # Avec timestamps
5. Inspecter & Monitorer
# JSON complet du conteneur
docker inspect mon-app
# Extraire une valeur avec --format (Go template)
docker inspect --format '{{.State.Status}}' mon-app
docker inspect --format '{{.NetworkSettings.IPAddress}}' mon-app
# Métriques CPU/RAM en temps réel
docker stats
docker stats --no-stream # Snapshot unique
docker stats mon-app redis # Plusieurs conteneurs
# Processus dans le conteneur
docker top mon-app
6. Gestion avancée du cycle de vie
# ArrĂȘter proprement (SIGTERM puis SIGKILL aprĂšs 10s)
docker stop mon-app
docker stop -t 30 mon-app # 30s avant SIGKILL
# Redémarrer
docker restart mon-app
# Tuer immédiatement (SIGKILL)
docker kill mon-app
# Copier des fichiers hĂŽte â conteneur
docker cp ./config.json mon-app:/app/config.json
docker cp mon-app:/app/logs/app.log ./logs/
# Mettre Ă jour les configs d'un conteneur actif
docker update --memory 1g --cpus 2 mon-app
# Pause / Unpause
docker pause mon-app
docker unpause mon-app
# Nettoyage
docker container prune # Supprimer tous les arrĂȘtĂ©s
docker rm $(docker ps -aq) # Supprimer tous les conteneurs
Politique de restart :
no (défaut), on-failure[:N] (N tentatives max),
always (toujours, mĂȘme si arrĂȘtĂ© manuellement),
unless-stopped (comme always sauf si manuellement stoppé).