Docker

Le Guide Complet de la Containerisation en 2026

Default Cover
Auteur MEME
Date 07 mars 2026
Lecture 3 min
Vues 21

Docker: Le Guide Complet de la Containerisation en 2026

Docker a révolutionné le déploiement d'applications. Voici comment le maîtriser complètement.

## 1. Les Concepts Fondamentaux

### Image vs Conteneur

Une **image** est un blueprint, un **conteneur** est une instance en cours d'exécution.

```bash
# Créer une image
docker build -t mon-app:1.0 .

# Lancer un conteneur
docker run -d --name mon-conteneur mon-app:1.0

Dockerfile Simple

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["python", "app.py"]

Images et Registries

# Pull une image
docker pull ubuntu:22.04

# Créer une image custom
docker build -t myapp:latest .

# Tagger une image
docker tag myapp:latest monregistre/myapp:1.0

# Pusher vers Docker Hub
docker login
docker push monregistre/myapp:1.0

# Voir les images
docker images

Conteneurs - Gestion Complète

# Lancer un conteneur
docker run -d \
--name mon-app \
-p 8000:8000 \
-e DATABASE_URL=postgres://... \
-v /data:/app/data \
mon-app:latest

# Voir les conteneurs en cours
docker ps

# Voir tous les conteneurs
docker ps -a

# Logs
docker logs mon-app
docker logs -f mon-app # Suivi en direct

# Accéder au conteneur
docker exec -it mon-app bash

# Arrêter/Démarrer
docker stop mon-app
docker start mon-app

# Supprimer
docker rm mon-app

Volumes - Persistance des Données

# Dockerfile avec volume
FROM postgres:15

VOLUME /var/lib/postgresql/data

EXPOSE 5432

# Créer un volume
docker volume create mon-volume

# Utiliser un volume
docker run -d \
--name postgres \
-v mon-volume:/var/lib/postgresql/data \
postgres:15

# Voir les volumes
docker volume ls

# Inspecter un volume
docker volume inspect mon-volume

Réseaux Docker

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

# Lancer des conteneurs sur le même réseau
docker run -d \
--name web \
--network mon-reseau \
-p 8000:8000 \
mon-app:latest

docker run -d \
--name db \
--network mon-reseau \
postgres:15

# Les conteneurs peuvent se parler par nom!
# Dans web: connection à db via "db:5432"

Docker Compose - Orchestration Simple

version: '3.8'

services:
web:
build: .
ports:
- "8000:8000"
environment:
DATABASE_URL: postgres://db:5432/myapp
depends_on:
- db
volumes:
- ./:/app

db:
image: postgres:15
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secret
volumes:
- db_data:/var/lib/postgresql/data
ports:
- "5432:5432"

volumes:
db_data:

networks:
default:
name: mon-reseau

# Démarrer tous les services
docker-compose up -d

# Voir les logs
docker-compose logs -f web

# Arrêter
docker-compose down

# Rebuild les images
docker-compose build

Bonnes Pratiques pour les Dockerfile

# Mauvais: Gros Dockerfile, dépendances inutiles
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
python3 python3-pip git curl wget \
build-essential npm nodejs ...
RUN pip install -r requirements.txt
COPY . /app
WORKDIR /app

# Bon: Multi-stage build, optimisé
FROM python:3.11-slim as builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

FROM python:3.11-slim

WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .

ENV PATH=/root/.local/bin:$PATH

EXPOSE 8000
CMD ["gunicorn", "app:app"]

Docker en Production

# Production-ready Dockerfile
FROM node:20-alpine as builder

WORKDIR /app
COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

# Stage de production
FROM node:20-alpine

WORKDIR /app

# Security: ne pas utiliser root
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001

COPY --from=builder --chown=nextjs:nodejs /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 3000

CMD ["node", "server.js"]

Debugging et Performance

# Voir l'utilisation des ressources
docker stats

# Inspecter un conteneur
docker inspect mon-app

# Voir les layers d'une image
docker history mon-app

# Réduire la taille des images
docker image prune -a

# Voir l'usage disque
docker system df

Déploiement avec Docker

# Sur AWS/Heroku
docker build -t monapp:latest .
docker tag monapp:latest registry.heroku.com/myapp/web:latest
docker push registry.heroku.com/myapp/web:latest
heroku container:release web

# Avec Docker Swarm
docker swarm init
docker service create --name web mon-app:latest

# Avec Kubernetes
kubectl create deployment myapp --image=myapp:latest

Ressources

Docker Hub: https://hub.docker.com
Documentation: https://docs.docker.com
Best Practices: https://docs.docker.com/develop/dev-best-practices/

Connectez-vous pour participer à la discussion.

Se connecter

0 Commentaires

Aucun commentaire pour le moment. Soyez le premier !

Voir tous les articles