Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🐳 Docker – Installation & DĂ©ploiement (Linux & Cloud)

Guide complet IDEO‑Lab pour partir de zĂ©ro et aller jusqu'au dĂ©ploiement AWS/GCP.

1.1

Vue d'ensemble Docker

Qu'est-ce qu'un conteneur ? Conteneur vs. VM.

Conteneur VM Isolation
1.2

Architecture Docker

Daemon, Client, Registry, Images, Conteneurs.

Daemon Client Registry
1.3

Installation (Linux)

Ubuntu/Debian, CentOS/RHEL, post-install.

apt dnf usermod
2.1

Gérer les Images

Pull, ls, rmi. Comprendre Docker Hub.

pull images rmi
2.2

Gérer les Conteneurs

Run, ps, stop, start, rm, logs.

run ps logs
2.3

Interagir (exec)

Lancer un shell dans un conteneur actif.

exec -it /bin/bash debug
3.1

Le Dockerfile

FROM, RUN, COPY, WORKDIR, CMD, ENTRYPOINT.

Dockerfile FROM CMD
3.2

Build d'une image

Construire sa propre image avec docker build.

build -t (tag) . (context)
4.1

Volumes & Données

Persister les données (-v), volumes nommés.

volumes -v persistance
4.2

Networking

Exposer les ports (-p), réseaux bridge/host.

network -p bridge
4.3

Docker Hub & Push

Login, tag et push d'une image privée/publique.

login tag push
5.1

Docker Compose

Gérer des applications multi-conteneurs (YAML).

compose yaml services
5.2

Commandes Compose

up, down, logs, build.

up -d down logs -f
6.1

Déploiement Cloud

Principes, AWS (ECR/ECS), GCP (Registry/Cloud Run).

AWS GCP Cloud Run
6.2

Nettoyage

docker system prune, nettoyer volumes/images.

prune cleanup espace disque
7.1

Cheat‑sheet Docker

Commandes Docker fréquentes.

cheat cmd
1.1 Vue d'ensemble Docker
Qu'est-ce que Docker ?

Docker est une plateforme open-source qui permet d'automatiser le déploiement, la mise à l'échelle et la gestion d'applications en utilisant des **conteneurs**.

Un conteneur "emballe" le code d'une application et toutes ses dépendances (libs, binaires, etc.) dans une seule unité exécutable.

Avantages
  • Isolation : Les conteneurs sont isolĂ©s les uns des autres et du systĂšme hĂŽte.
  • PortabilitĂ© : "Ça marche sur ma machine" devient "Ça marche partout" (dev, test, prod, cloud).
  • LĂ©gĂšretĂ© : Partage le noyau (Kernel) de l'OS hĂŽte. DĂ©marre en secondes.
  • ReproductibilitĂ© : Les builds sont dĂ©terministes grĂące au Dockerfile.
Conteneur vs. Machine Virtuelle (VM)

Une VM virtualise le matériel (CPU, RAM), un conteneur virtualise l'OS.

VOTRE SERVEUR (OS HÔTE + MatĂ©riel)
    │
    ├── 🐳 DOCKER (Daemon)
    │   │  (Partage le Kernel de l'OS Hîte)
    │   ├─ Conteneur A (App A + Libs)
    │   ├─ Conteneur B (App B + Libs)
    │
    └── 🔄 HYPERVISEUR (ex: VMware, VirtualBox)
        │
        ├─ VM 1 (OS InvitĂ© 1 + App C + Libs)
        └─ VM 2 (OS InvitĂ© 2 + App D + Libs)

Docker est beaucoup plus léger et rapide qu'une VM.

1.2 Architecture Docker
Les 3 composants clés
  • Docker Daemon (dockerd) : Le service (processus) qui tourne en arriĂšre-plan. C'est lui qui Ă©coute les commandes de l'API et gĂšre les objets Docker (build, run, ...).
  • Client Docker (docker) : L'outil en ligne de commande (CLI) que vous utilisez. Il parle au Daemon.
  • Registry (ex: Docker Hub) : Un "stockage" d'images. C'est lĂ  que vous pull (tĂ©lĂ©chargez) et push (envoyez) vos images.
Les 3 objets clés
  • Image : Un "template" en lecture seule, comme une "recette" ou un "snapshot" (ex: ubuntu:22.04, python:3.11-slim).
  • Conteneur : Une instance exĂ©cutable d'une image. C'est l'image qui "prend vie".
  • Dockerfile : Un fichier texte qui dĂ©crit les Ă©tapes pour construire une Image.
Schéma de flux
Vous (Terminal)
    │
    │  [1] docker run nginx
    │
    ▌
    Client Docker (CLI)
    │
    │  (API REST)
    │
    ▌
    Docker Daemon (dockerd)
    │
    │  [2] Image "nginx" locale ?
    │       Non.
    │
    │  [3] Pull de l'image
    │
    ◄───── Registry (Docker Hub)
    │
    │  [4] CrĂ©ation du conteneur
    │
    ▌
    Conteneur "nginx" (actif)
1.3 Installation Docker (Linux)
Installation (Ubuntu 22.04+ / Debian 11+)

Nous installons depuis le dépÎt officiel de Docker pour avoir la derniÚre version.

# 1. Nettoyer les anciennes versions
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2. Installer les prérequis
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# 3. Ajouter la clé GPG officielle de Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 4. Ajouter le dépÎt
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. Installer Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Installation (CentOS / RHEL)
# 1. Nettoyer les anciennes versions
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 2. Ajouter le dépÎt
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 3. Installer Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Installation (Fedora)
# 1. Ajouter le dépÎt
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

# 2. Installer Docker Engine
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Post-Installation (Important)

Par défaut, Docker nécessite les droits sudo. Pour gérer Docker en tant que non-root :

# 1. CrĂ©er le groupe "docker" (il existe peut-ĂȘtre dĂ©jĂ )
sudo groupadd docker

# 2. Ajouter votre utilisateur au groupe
sudo usermod -aG docker $USER

ATTENTION : Vous devez vous déconnecter et vous reconnecter (ou redémarrer) pour que ce changement soit pris en compte.
Alternative : newgrp docker (valable uniquement pour la session terminal actuelle).

Démarrer et tester
# Activer et démarrer le service
sudo systemctl enable --now docker

# Vérifier le statut
sudo systemctl status docker

# (AprĂšs reconnexion) Tester sans sudo
docker run hello-world

Si vous voyez "Hello from Docker!", l'installation est réussie.

2.1 Gérer les Images Docker
Télécharger (pull)

Télécharge une image depuis un registry (Docker Hub par défaut).

# Télécharge la derniÚre version (tag "latest")
docker pull nginx

# Télécharge une version spécifique
docker pull python:3.11-slim
Lister les images
docker images
# ou
docker image ls
REPOSITORY   TAG         IMAGE ID       CREATED       SIZE
python       3.11-slim   a1b2c3d4e5f6   2 weeks ago   120MB
nginx        latest      b7c8d9e0f1a2   3 weeks ago   187MB
Supprimer une image (rmi)

Supprime une image localement (par son nom ou ID).

docker rmi nginx
# ou
docker rmi b7c8d9e0f1a2

Note : Vous ne pouvez pas supprimer une image si un conteneur (mĂȘme arrĂȘtĂ©) l'utilise. Il faut d'abord supprimer le conteneur.

Chercher une image
# Cherche sur Docker Hub
docker search postgres
2.2 Gérer les Conteneurs
Lancer un conteneur (run)

docker run crée et démarre un conteneur à partir d'une image.

# Lance nginx en arriĂšre-plan (-d) et nomme (-name) le conteneur
docker run -d --name mon-serveur-web nginx
Lister les conteneurs
# Lister les conteneurs ACTIFS
docker ps

# Lister TOUS les conteneurs (actifs et arrĂȘtĂ©s)
docker ps -a
Voir les logs
# Afficher les logs (stdout/stderr)
docker logs mon-serveur-web

# Suivre les logs en direct (-f = follow)
docker logs -f mon-serveur-web
ArrĂȘter / DĂ©marrer

Pour un conteneur existant (créé avec run).

docker stop mon-serveur-web
docker start mon-serveur-web
docker restart mon-serveur-web
Supprimer un conteneur (rm)

Un conteneur doit ĂȘtre arrĂȘtĂ© avant d'ĂȘtre supprimĂ©.

docker stop mon-serveur-web
docker rm mon-serveur-web

# Forcer la suppression (mĂȘme s'il est actif)
docker rm -f mon-serveur-web
Run & auto-suppression

--rm supprime automatiquement le conteneur lorsqu'il s'arrĂȘte. TrĂšs utile pour les tests.

docker run --rm hello-world
2.3 Interagir avec un conteneur (exec)
docker exec

Permet de lancer une commande à l'intérieur d'un conteneur déjà en cours d'exécution. C'est l'outil principal pour le débogage.

Ouvrir un shell interactif

L'utilisation la plus courante est d'ouvrir un shell (comme bash ou sh) dans le conteneur.

# docker exec [options] [nom_conteneur] [commande]
docker exec -it mon-serveur-web /bin/bash
  • -i (interactif) : Garde STDIN ouvert.
  • -t (TTY) : Alloue un pseudo-terminal (ce qui donne un "prompt").

Si /bin/bash n'existe pas (images minimales type Alpine), essayez /bin/sh.

Exécuter une commande simple

On peut aussi lancer une commande non-interactive.

# Lister les fichiers dans /app d'un conteneur "mon-app"
docker exec mon-app ls /app

# Voir les variables d'environnement
docker exec mon-app env
run vs exec
# 'run' CRÉE un nouveau conteneur
# Lance un shell DANS un NOUVEAU conteneur ubuntu
docker run -it --rm ubuntu /bin/bash

# 'exec' agit sur un conteneur EXISTANT
# Lance un shell DANS le conteneur "mon-serveur-web"
docker exec -it mon-serveur-web /bin/bash
3.1 Le Dockerfile (Recette de l'image)
Exemple de Dockerfile (Python)

Un fichier nommé Dockerfile (sans extension) à la racine du projet.

# 1. Image de base
FROM python:3.11-slim

# 2. Répertoire de travail dans le conteneur
WORKDIR /app

# 3. Copier les dépendances
COPY requirements.txt .

# 4. Installer les dépendances
RUN pip install --no-cache-dir -r requirements.txt

# 5. Copier le reste de l'application
COPY . .

# 6. Commande à exécuter au démarrage
CMD ["python", "app.py"]
Instructions principales
  • FROM : Toujours la premiĂšre ligne. DĂ©finit l'image de base (ex: node:18, ubuntu:22.04).
  • WORKDIR : Change le rĂ©pertoire courant pour les commandes suivantes (RUN, COPY, CMD).
  • COPY : Copie des fichiers/dossiers de l'hĂŽte (PC) vers le conteneur. (COPY [source] [destination])
  • RUN : ExĂ©cute une commande pendant le build de l'image (ex: apt-get install, pip install).
  • CMD : DĂ©finit la commande par dĂ©faut qui sera exĂ©cutĂ©e au lancement (run) du conteneur. (Il ne peut y en avoir qu'un seul).
  • ENTRYPOINT : Similaire Ă  CMD, mais plus difficile Ă  surcharger.
  • EXPOSE : Indique (documente) sur quel port l'application Ă©coute. (NĂ©cessite -p au run).
3.2 Build d'une image (docker build)
Commande docker build

Cette commande lit le Dockerfile et construit l'image étape par étape.

# Syntaxe : docker build -t [NOM_IMAGE:TAG] [CONTEXTE]
docker build -t mon-app:1.0 .
  • -t mon-app:1.0 : (Tag) Donne un nom (mon-app) et un tag (1.0) Ă  l'image. Si :1.0 est omis, :latest est utilisĂ©.
  • . : (Contexte) Le point final est crucial. Il indique Ă  Docker "le rĂ©pertoire courant". C'est le contexte de build, d'oĂč les fichiers seront copiĂ©s (ex: COPY . .).
Build multi-stage

Permet de garder une image finale légÚre, en séparant la phase de build (avec outils, SDK) de la phase d'exécution (runtime).

# Etape 1: Build (ex: Node.js)
FROM node:18 AS builder
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build

# Etape 2: Prod (ex: Nginx)
FROM nginx:alpine
# Copie seulement les fichiers buildés de l'étape 1
COPY --from=builder /app/build /usr/share/nginx/html
.dockerignore

Similaire au .gitignore, ce fichier (.dockerignore) exclut des fichiers/dossiers du contexte de build.
Cela accélÚre le build et évite d'inclure des secrets ou des modules inutiles (ex: node_modules, .git, .env).

# .dockerignore
.git
.vscode
node_modules
*.log
.env
Cache de build

Docker met en cache chaque étape (layer). Si vous ne modifiez pas un fichier, Docker réutilise le cache, rendant les builds suivants quasi-instantanés.

C'est pourquoi on COPY requirements.txt et RUN pip install AVANT COPY . . (cf. 3.1).

4.1 Volumes & Persistance des données
Le problĂšme

Les conteneurs sont "stateless" (sans état). Quand vous docker rm un conteneur (ex: base de données), toutes les données écrites à l'intérieur sont perdues.

Bind Mounts (Liaison)

Monte un répertoire de votre machine HÎte (PC) dans le conteneur. Pratique pour le développement.

# -v [CHEMIN_HOTE]:[CHEMIN_CONTENEUR]
docker run -d -v /home/user/projets/mon-site:/usr/share/nginx/html nginx

Inconvénient : lié au chemin absolu de l'hÎte, moins portable.

Volumes nommés (La bonne pratique)

Docker gĂšre lui-mĂȘme le volume. C'est la mĂ©thode prĂ©fĂ©rĂ©e pour la persistance (ex: BDD).

# Crée un volume (géré par Docker)
docker volume create postgres-data

# Lance le conteneur en attachant le volume
docker run -d --name db \
  -v postgres-data:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  postgres:15

MĂȘme si vous faites docker rm db, le volume "postgres-data" et son contenu persistent. Vous pouvez le rĂ©-attacher Ă  un nouveau conteneur.

Gérer les volumes
# Lister les volumes
docker volume ls

# Inspecter un volume (voir oĂč il est sur l'hĂŽte)
docker volume inspect postgres-data

# Supprimer un volume (ATTENTION : données perdues)
docker volume rm postgres-data

# Supprimer tous les volumes non utilisés
docker volume prune
Volume anonyme

Si vous omettez la source (juste -v /data), Docker crée un volume anonyme (avec un long ID). Difficile à gérer, à éviter.

4.2 Networking Docker
Exposition de ports (-p)

Par défaut, les conteneurs sont isolés. Pour accéder à un service (ex: serveur web) depuis votre machine hÎte, vous devez "mapper" un port.

# -p [PORT_HOTE]:[PORT_CONTENEUR]

# AccĂšde Ă  Nginx sur http://localhost:8080
docker run -d -p 8080:80 nginx

Ceci lie le port 8080 de l'hĂŽte (votre PC) au port 80 du conteneur (oĂč Nginx Ă©coute).

Réseau "bridge" (par défaut)

Docker crĂ©e un rĂ©seau virtuel (bridge) pour vos conteneurs. Ils peuvent communiquer entre eux en utilisant leur nom, s'ils sont sur le mĂȘme rĂ©seau.

# 1. Créer un réseau
docker network create mon-reseau

# 2. Lancer la BDD sur ce réseau
docker run -d --name db --network mon-reseau postgres

# 3. Lancer l'app sur le mĂȘme rĂ©seau
# L'app peut joindre la BDD via "http://db:5432"
docker run -d --name app --network mon-reseau mon-app-image
Réseau "host"

Le conteneur partage l'interface réseau de l'hÎte. Il n'y a pas d'isolation réseau. Si le conteneur écoute sur le port 80, il est accessible sur le port 80 de l'hÎte.

docker run -d --network host mon-app-image

Plus performant, mais moins sécurisé et risque de conflits de ports.

Gérer les réseaux
# Lister les réseaux
docker network ls

# Inspecter un réseau (voir les conteneurs dessus)
docker network inspect mon-reseau

# Supprimer un réseau
docker network rm mon-reseau
4.3 Docker Hub & Push d'images
1. Se connecter (login)

Se connecter à un registry (Docker Hub par défaut).

# Entrez votre identifiant Docker Hub et mot de passe (ou Token)
docker login

Pour d'autres registries (AWS ECR, GCP GCR) :

docker login [URL_REGISTRY]
2. Tagger l'image (tag)

Pour "pusher" une image, elle doit ĂȘtre taggĂ©e au format [USERNAME]/[NOM_IMAGE]:[TAG].

# Image locale (cf 3.2)
docker build -t mon-app:1.0 .

# Créer un alias (tag) pour Docker Hub
# Syntaxe: docker tag [IMAGE_LOCALE] [IMAGE_REGISTRY]
docker tag mon-app:1.0 ideolab/mon-app:1.0
3. Envoyer l'image (push)

Envoie l'image taggée vers le registry.

docker push ideolab/mon-app:1.0

# (Enverra aussi le tag "latest" si vous le pushez)
docker tag mon-app:1.0 ideolab/mon-app:latest
docker push ideolab/mon-app:latest
Pull d'une image privée

Une fois connectée (docker login), vous pouvez "pull" des images privées auxquelles vous avez accÚs.

docker pull ideolab/mon-app-privee:1.2
5.1 Introduction Ă  Docker Compose
Qu'est-ce que Docker Compose ?

Docker Compose est un outil pour définir et exécuter des applications Docker multi-conteneurs.
Au lieu de taper de longues commandes docker run avec --network, -v, -p, -e... on décrit toute l'application dans un seul fichier YAML.

Docker Compose gĂšre pour vous :

  • La crĂ©ation d'un rĂ©seau commun.
  • Le dĂ©marrage/arrĂȘt des conteneurs dans le bon ordre (depends_on).
  • La gestion des volumes et des ports.

Depuis Docker v2, docker compose (avec un espace) est intégré à la CLI Docker.

Exemple : docker-compose.yml

Un site WordPress simple (Web + Base de données).

version: "3.8"

services:
  # Service 1: La base de données
  db:
    image: mysql:8.0
    container_name: wordpress_db
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root_secret
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_secret
    restart: always

  # Service 2: Le site web
  wordpress:
    image: wordpress:latest
    container_name: wordpress_web
    ports:
      - "8080:80" # HĂŽte:Conteneur
    environment:
      WORDPRESS_DB_HOST: db # Nom du service DB
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_secret
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - db # Attend que le service "db" soit lancé
    restart: always

# Gestion centralisée des volumes
volumes:
  db-data:
5.2 Commandes Docker Compose
Démarrer l'application (up)

Crée et démarre tous les services définis dans docker-compose.yml.

# Démarre en arriÚre-plan (-d = detached)
docker compose up -d

# Démarre en avant-plan (affiche les logs)
docker compose up

Si les images n'existent pas, up les "pull" automatiquement. Si le docker-compose.yml a changé, up recrée les conteneurs nécessaires.

ArrĂȘter et supprimer (down)

ArrĂȘte et supprime les conteneurs, le rĂ©seau, mais prĂ©serve les volumes.

docker compose down

# Supprime aussi les volumes
docker compose down -v
Autres commandes utiles
# Lister les conteneurs de l'application
docker compose ps

# Voir les logs de tous les services
docker compose logs

# Suivre les logs en direct
docker compose logs -f

# ArrĂȘter les services (sans les supprimer)
docker compose stop

# Démarrer les services (préalablement stoppés)
docker compose start

# Forcer le rebuild des images avant de démarrer
docker compose up -d --build

# Exécuter une commande dans un service (ex: shell)
docker compose exec wordpress /bin/bash
6.1 Déploiement Cloud (AWS & GCP)
Pipeline de déploiement

DĂ©ployer sur le cloud suit toujours le mĂȘme schĂ©ma en 3 Ă©tapes :

1. BUILD : Construire l'image Docker (localement ou via CI/CD)
   docker build -t mon-app .

2. PUSH : Envoyer l'image vers un Registry (privé) du Cloud
   docker tag mon-app registry.cloud.com/mon-app
   docker push registry.cloud.com/mon-app

3. RUN : Demander au service Cloud de lancer un conteneur basé sur cette nouvelle image
   (ex: "Mets Ă  jour le service X avec l'image Y")
Registries vs. Services

Il faut différencier les deux briques :

  • Registry (Stockage) : L'endroit oĂč les images sont stockĂ©es (le "Docker Hub" privĂ©).
    • AWS : ECR (Elastic Container Registry)
    • GCP : Artifact Registry (ou ancien GCR)
  • Service (ExĂ©cution) : Le service qui "run" les conteneurs (le "docker run" du cloud).
    • AWS : ECS (Elastic Container Service) ou EKS (Kubernetes)
    • GCP : Cloud Run (serverless) ou GKE (Kubernetes)

Nous nous concentrons sur les options les plus simples : ECS (Fargate) pour AWS et Cloud Run pour GCP.

Déployer sur GCP (Cloud Run)

Cloud Run est l'option "serverless" de GCP. ExtrĂȘmement simple, facture Ă  l'usage (scale-to-zero).

1. Authentification (CLI gcloud)
# S'authentifier auprĂšs de gcloud
gcloud auth login

# Configurer l'accĂšs Docker Ă  Artifact Registry
gcloud auth configure-docker [REGION]-docker.pkg.dev
2. Build & Push (Artifact Registry)
# Définir les variables (exemple)
export PROJECT_ID="mon-projet-gcp"
export REGION="europe-west1"
export IMAGE_NAME="mon-app"
export IMAGE_TAG="${REGION}-docker.pkg.dev/${PROJECT_ID}/mon-registry/${IMAGE_NAME}:1.0"

# Tagger l'image locale
docker build -t $IMAGE_TAG .

# Pusher vers Artifact Registry
docker push $IMAGE_TAG
3. Run (Cloud Run)

Déployer le service (une seule commande).

gcloud run deploy mon-service-web \
  --image $IMAGE_TAG \
  --platform managed \
  --region $REGION \
  --allow-unauthenticated # Permet l'accĂšs public (pour un site web)

GCP vous donnera une URL HTTPS publique pour votre service.

Déployer sur AWS (ECR + ECS Fargate)

Fargate est l'option "serverless" d'ECS (vous ne gérez pas les serveurs).

1. Authentification (CLI aws)
# Configurer (clés IAM)
aws configure

# Obtenir un token de login ECR (valide 12h)
aws ecr get-login-password --region [REGION] | docker login \
  --username AWS \
  --password-stdin [AWS_ACCOUNT_ID].dkr.ecr.[REGION].amazonaws.com
2. Build & Push (ECR)
# Définir les variables (exemple)
export AWS_ACCOUNT_ID="123456789012"
export REGION="eu-west-3"
export IMAGE_NAME="mon-app"
export IMAGE_TAG="${AWS_ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${IMAGE_NAME}:1.0"

# Tagger l'image locale
docker build -t $IMAGE_TAG .

# Pusher vers ECR (le dĂ©pĂŽt doit ĂȘtre créé au prĂ©alable)
docker push $IMAGE_TAG
3. Run (ECS)

Le déploiement sur ECS est plus complexe que Cloud Run. Il nécessite (via la console ou la CLI) :

  1. Task Definition : Un "template" (JSON) qui décrit le(s) conteneur(s) à lancer (image, CPU, RAM, ports...).
  2. Cluster : Un groupement logique de services (ex: "Cluster-Prod").
  3. Service : Fait le lien entre la Task Definition et le Cluster. Indique combien de "tasks" lancer (ex: 2 instances), gĂšre le load balancing et les mises Ă  jour.
# Mettre Ă  jour un service existant (aprĂšs un push)
aws ecs update-service --cluster [CLUSTER] --service [SERVICE] --force-new-deployment
6.2 Nettoyage (docker system prune)
Nettoyage global

Docker peut accumuler beaucoup d'objets (conteneurs arrĂȘtĂ©s, images "dangling", cache de build) qui prennent de la place disque.

# Commande magique pour nettoyer
docker system prune

Ceci supprime :

  • Tous les conteneurs arrĂȘtĂ©s.
  • Tous les rĂ©seaux non utilisĂ©s.
  • Toutes les images "dangling" (sans tag, souvent des Ă©tapes de build intermĂ©diaires).
  • Tout le cache de build.
# Version agressive (supprime aussi les images non utilisées)
docker system prune -a
Nettoyage par objet
# Supprimer tous les conteneurs arrĂȘtĂ©s
docker container prune

# Supprimer tous les volumes non utilisés (non attachés)
docker volume prune

# Supprimer tous les réseaux non utilisés
docker network prune

# Supprimer les images "dangling"
docker image prune
7.1 Cheat‑sheet Docker
Build & Images
# Construire une image
docker build -t mon-app:1.0 .

# Lister les images
docker images

# Télécharger une image
docker pull ubuntu:22.04

# Supprimer une image
docker rmi ubuntu:22.04

# Tagger une image (pour push)
docker tag mon-app:1.0 user/mon-app:1.0

# Envoyer vers registry
docker push user/mon-app:1.0

# Se connecter
docker login
Conteneurs & Exécution
# Lancer (détaché, port, nom)
docker run -d -p 8080:80 --name web nginx

# Lister les conteneurs actifs
docker ps

# Lister tous les conteneurs
docker ps -a

# ArrĂȘter un conteneur
docker stop web

# Démarrer un conteneur
docker start web

# Supprimer un conteneur (doit ĂȘtre stoppĂ©)
docker rm web

# Supprimer en forçant
docker rm -f web

# Voir les logs (et suivre)
docker logs -f web

# Exécuter un shell dans un conteneur
docker exec -it web /bin/bash

# Nettoyage
docker system prune -a