Aller au contenu

Introduction à Docker

Docker est une plateforme de conteneurisation qui permet d’empaqueter des applications avec toutes leurs dépendances dans des conteneurs isolés.

  • Portabilité : “Ça marche sur ma machine” → Ça marche partout
  • Isolation : Chaque conteneur est indépendant
  • Efficacité : Plus léger que les machines virtuelles
  • Reproductibilité : Environnements identiques dev/prod
┌─────────────────────────────────────────┐
│ Docker Engine │
├─────────────┬─────────────┬────────────┤
│ Conteneur 1 │ Conteneur 2 │ Conteneur 3│
│ (App Node) │ (App Python)│ (Database) │
├─────────────┴─────────────┴────────────┤
│ Images Docker │
├─────────────────────────────────────────┤
│ Système d'exploitation │
└─────────────────────────────────────────┘
Fenêtre de terminal
# Ajouter le dépôt Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Ajouter l'utilisateur au groupe docker
sudo usermod -aG docker $USER

Téléchargez Docker Desktop.

Fenêtre de terminal
# Télécharger une image
docker pull nginx:latest
# Lister les images
docker images
# Supprimer une image
docker rmi nginx:latest
Fenêtre de terminal
# Lancer un conteneur
docker run -d --name mon-nginx -p 8080:80 nginx
# Lister les conteneurs
docker ps # En cours
docker ps -a # Tous
# Arrêter / Démarrer
docker stop mon-nginx
docker start mon-nginx
# Supprimer
docker rm mon-nginx

Un Dockerfile définit comment construire une image :

# Image de base
FROM node:20-alpine
# Répertoire de travail
WORKDIR /app
# Copier les fichiers de dépendances
COPY package*.json ./
# Installer les dépendances
RUN npm ci --only=production
# Copier le code source
COPY . .
# Exposer le port
EXPOSE 3000
# Commande de démarrage
CMD ["node", "server.js"]

Construire et lancer :

Fenêtre de terminal
# Construire l'image
docker build -t mon-app:1.0 .
# Lancer le conteneur
docker run -d -p 3000:3000 mon-app:1.0

Pour orchestrer plusieurs conteneurs, utilisez docker-compose.yml :

version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://db:5432/app
depends_on:
- db
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=app
- POSTGRES_USER=user
- POSTGRES_PASSWORD=secret
volumes:
postgres_data:
Fenêtre de terminal
# Démarrer tous les services
docker compose up -d
# Voir les logs
docker compose logs -f
# Arrêter
docker compose down