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Ă©).