Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 167 minIntermédiaire

Aide-mémoire : les commandes Docker et Compose

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • retrouver vite la commande Docker ou Compose qu'il te faut ;
  • partir d'un squelette de compose.yaml sûr pour un nouveau projet.

Cet aide-mémoire regroupe les commandes Docker et Docker Compose de ce cours, classées par usage, avec les options les plus utiles. Garde-le sous la main pendant tes TP et tes réalisations professionnelles.

Conteneurs

CommandeEffet
docker run -d --name web -p 8080:80 nginx:1.30-alpineCrée et démarre un conteneur en arrière-plan, port publié
docker run --rm -it alpine:3.24 shConteneur jetable, interactif
docker ps / docker ps -aConteneurs en marche / tous
docker logs -f --tail 50 webJournaux, en continu
docker exec -it web shShell dans un conteneur qui tourne
docker stop web / docker start web / docker restart webArrêter, démarrer, redémarrer
docker rm -f webArrêter et supprimer
docker inspect webConfiguration complète en JSON
docker stats --no-streamConsommation instantanée
docker cp web:/chemin/fichier .Copier un fichier depuis le conteneur
docker eventsÉvénements du démon en direct

Images

CommandeEffet
docker pull mysql:8.4Télécharger une image
docker imagesImages présentes
docker build -t app:1.0 .Construire depuis le Dockerfile du dossier
docker build --platform linux/amd64 -t app:1.0 .Construire pour une autre architecture
docker tag app:1.0 registre.ad.sorbier.example/outils/app:1.0Ajouter un nom
docker push registre.ad.sorbier.example/outils/app:1.0Envoyer dans un registre
docker history app:1.0Couches d'une image
docker save -o app.tar app:1.0 / docker load -i app.tarExporter, importer sans registre
docker login / docker logoutSe connecter à un registre

Volumes et réseaux

CommandeEffet
docker volume create donnees / docker volume lsCréer, lister
docker volume inspect donneesEmplacement sur l'hôte
docker network create gestionRéseau personnalisé (DNS interne)
docker network create --internal donneesRéseau sans accès extérieur
docker network connect gestion webBrancher un conteneur
docker network inspect gestionSous-réseau, conteneurs branchés

Commandes Docker Compose

CommandeEffet
docker compose up -dCréer et démarrer, ou appliquer les changements
docker compose psÉtat des services
docker compose logs -f apiJournaux d'un service
docker compose exec bdd shShell dans un service
docker compose run --rm api node script.jsCommande ponctuelle
docker compose pull / docker compose buildNouvelles images
docker compose configFichier final, variables remplacées
docker compose stop / docker compose startArrêter, redémarrer sans supprimer
docker compose downSupprimer conteneurs et réseaux (volumes gardés)
docker compose down -vSupprimer aussi les volumes (données perdues)

Squelette d'un compose.yaml

yaml
name: projet

services:
  app:
    image: ghcr.io/organisation/app:1.0.0
    environment:
      DB_HOST: bdd
      DB_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_password
    networks:
      - frontal
      - donnees
    depends_on:
      bdd:
        condition: service_healthy
    restart: unless-stopped

  bdd:
    image: mysql:8.4
    environment:
      MYSQL_DATABASE: app
      MYSQL_USER: app
      MYSQL_PASSWORD_FILE: /run/secrets/db_password
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
    secrets:
      - db_password
      - db_root_password
    volumes:
      - bdd-donnees:/var/lib/mysql
    networks:
      - donnees
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 10s
      retries: 5
      start_period: 30s
    restart: unless-stopped

networks:
  frontal:
  donnees:
    internal: true

volumes:
  bdd-donnees:

secrets:
  db_password:
    file: ./secrets/db_password.txt
  db_root_password:
    file: ./secrets/db_root_password.txt

Nettoyage et diagnostic

CommandeEffet
docker system dfPlace occupée par catégorie
docker container pruneSupprimer les conteneurs arrêtés
docker image prune (-a)Supprimer les images sans étiquette (toutes les inutilisées)
docker volume pruneSupprimer les volumes anonymes inutilisés
sudo journalctl -u docker -n 50Journaux du démon
docker infoConfiguration du démon (pilotes, sécurité, plages réseau)

Les réflexes de sécurité

RéflexeOù
Étiquette précise, jamais latestFROM, image:
Utilisateur sans privilègeUSER dans le Dockerfile, user: dans Compose
Aucun secret dans l'image ni dans Git.dockerignore, secrets Compose
Un seul port publié : celui du reverse proxyports:
Base sur un réseau interneinternal: true
Jamais privileged, jamais le socket dans un conteneur exposéRevue de chaque compose.yaml
Limites de mémoire et de processusdeploy.resources.limits, pids_limit
Images analysées et reconstruites régulièrementTrivy ou Docker Scout dans la CI
Rotation et centralisation des journauxdaemon.json, srv-journaux

Chapitre terminé !

Tu as lu ce chapitre jusqu'au bout. Passe au suivant tant que c'est frais.

chapitres
–
de série
–
du cours
–
Cours suivant : pfSenseRevoir le sommaire du cours