Introduction à Docker

Docker est une plateforme de conteneurisation qui permet de créer, déployer et exécuter des applications dans des conteneurs.

Concepts de base

  • Image : Template en lecture seule pour créer des conteneurs
  • Conteneur : Instance exécutable d'une image
  • Dockerfile : Instructions pour construire une image
  • Registry : Dépôt d'images (ex: Docker Hub)
  • Volume : Stockage persistant pour les conteneurs

Commandes de base

# Construire une image
docker build -t mon-app:1.0 .

# Lister les images
docker images

# Exécuter un conteneur
docker run -d -p 8080:80 mon-app:1.0

# Lister les conteneurs
docker ps

# Arrêter un conteneur
docker stop <container_id>

# Supprimer un conteneur
docker rm <container_id>

# Supprimer une image
docker rmi mon-app:1.0

Dockerfile

# Utiliser une image de base
FROM node:18-alpine

# Définir le répertoire de travail
WORKDIR /app

# Copier les fichiers de dépendances
COPY package*.json ./

# Installer les dépendances
RUN npm install

# Copier le reste des fichiers
COPY . .

# Exposer le port
EXPOSE 3000

# Commande de démarrage
CMD ["npm", "start"]

Instructions courantes :

  • FROM - Image de base
  • WORKDIR - Répertoire de travail
  • COPY - Copier des fichiers
  • RUN - Exécuter des commandes
  • EXPOSE - Déclarer les ports
  • ENV - Variables d'environnement
  • CMD - Commande par défaut

Docker Compose

# docker-compose.yml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db

  db:
    image: postgres:14
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=myapp
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

Réseaux Docker

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

# Connecter un conteneur
docker run -d \
  --name api \
  --network mon-reseau \
  mon-api:1.0

# Types de réseaux :
- bridge (défaut)
- host
- none
- overlay (swarm)

# Lister les réseaux
docker network ls

# Inspecter un réseau
docker network inspect mon-reseau

Architecture Docker

Composants clés

  • Docker Engine : Cœur de Docker, gère les conteneurs
  • Docker Client : Interface en ligne de commande
  • Docker Registry : Stockage et distribution d'images
  • Docker Compose : Gestion d'applications multi-conteneurs

Cycle de vie

  1. Création du Dockerfile
  2. Construction de l'image
  3. Push vers un registry
  4. Pull depuis un registry
  5. Exécution du conteneur