đł Docker â Installation & DĂ©ploiement (Linux & Cloud)
Guide complet IDEOâLab pour partir de zĂ©ro et aller jusqu'au dĂ©ploiement AWS/GCP.
Vue d'ensemble Docker
Qu'est-ce qu'un conteneur ? Conteneur vs. VM.
Conteneur VM IsolationArchitecture Docker
Daemon, Client, Registry, Images, Conteneurs.
Daemon Client RegistryInstallation (Linux)
Ubuntu/Debian, CentOS/RHEL, post-install.
apt dnf usermodGérer les Images
Pull, ls, rmi. Comprendre Docker Hub.
pull images rmiGérer les Conteneurs
Run, ps, stop, start, rm, logs.
run ps logsInteragir (exec)
Lancer un shell dans un conteneur actif.
exec -it /bin/bash debugLe Dockerfile
FROM, RUN, COPY, WORKDIR, CMD, ENTRYPOINT.
Dockerfile FROM CMDBuild d'une image
Construire sa propre image avec docker build.
Volumes & Données
Persister les données (-v), volumes nommés.
Networking
Exposer les ports (-p), réseaux bridge/host.
Docker Hub & Push
Login, tag et push d'une image privée/publique.
login tag pushDocker Compose
Gérer des applications multi-conteneurs (YAML).
compose yaml servicesCommandes Compose
up, down, logs, build.
Déploiement Cloud
Principes, AWS (ECR/ECS), GCP (Registry/Cloud Run).
AWS GCP Cloud RunNettoyage
docker system prune, nettoyer volumes/images.
Cheatâsheet Docker
Commandes Docker fréquentes.
cheat cmdQu'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.
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) etpush(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)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.
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
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
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
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-paurun).
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.0est omis,:latestest 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).
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.
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
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
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: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
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_TAG3. 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_TAG3. Run (ECS)
Le déploiement sur ECS est plus complexe que Cloud Run. Il nécessite (via la console ou la CLI) :
- Task Definition : Un "template" (JSON) qui décrit le(s) conteneur(s) à lancer (image, CPU, RAM, ports...).
- Cluster : Un groupement logique de services (ex: "Cluster-Prod").
- 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
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
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
