DevOps

Docker en 2024 : Meilleures Pratiques

Océane A.
10 juin 2024
13 min

Découvrez les meilleures pratiques Docker en 2024 pour optimiser vos conteneurs et améliorer la sécurité.

📝
Docker en 2024 continue d'évoluer avec des fonctionnalités avancées de sécurité, d'optimisation et de nouvelles pratiques qui transforment le développement et le déploiement d'applications conteneurisées.

Sécurité Renforcée


Docker 2024 apporte des améliorations majeures de sécurité pour protéger les applications en production.

Rootless Mode :


# Exécution de Docker sans privilèges root
docker run --userns=host --privileged=false nginx

# Configuration pour l'utilisateur non-root
echo $USER:100000:65536 > /etc/subuid
echo $USER:100000:65536 > /etc/subgid

Content Trust et Signatures :


# Activation de Docker Content Trust
$env:DOCKER_CONTENT_TRUST=1

# Signature des images
docker trust sign myregistry.com/myapp:latest

# Vérification des signatures
docker pull myregistry.com/myapp:latest

Scan de vulnérabilités intégré :


# Scan automatique des images
docker scan myapp:latest

# Scan avec rapport détaillé
docker scan --severity high myapp:latest

# Intégration CI/CD
docker scan --json myapp:latest > scan-report.json

Optimisations de Performance


Les nouvelles optimisations améliorent significativement les performances des conteneurs.

BuildKit avancé :


# syntax=docker/dockerfile:1.4
FROM node:18-alpine AS builder

# Cache des dépendances
COPY package*.json ./
RUN --mount=type=cache,target=/app/.npm \
    npm ci --only=production

# Build optimisé
COPY . .
RUN --mount=type=cache,target=/app/.npm \
    npm run build

# Image finale minimaliste
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

Métriques de performance :


  • Build 50% plus rapide avec BuildKit

  • Taille d'image réduite de 40% avec les optimisations

  • Démarrage 30% plus rapide des conteneurs

Nouvelles Fonctionnalités


Docker 2024 introduit plusieurs nouvelles fonctionnalités qui simplifient le développement.

Docker Compose V3 :


# docker-compose.yml
version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
      cache_from:
        - myapp:cache
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '0.5'
        reservations:
          memory: 256M
          cpus: '0.25'
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  db:
    image: postgres:15
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

Multi-stage builds optimisés :


# Build multi-étapes avec cache
FROM node:18-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm \
    npm ci --only=production

FROM node:18-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

FROM nginx:alpine AS production
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf

Meilleures Pratiques de Production


Les nouvelles pratiques améliorent la fiabilité et la maintenabilité des applications en production.

Configuration de sécurité :


# Dockerfile sécurisé
FROM node:18-alpine

# Création d'un utilisateur non-root
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001

WORKDIR /app

# Copie des fichiers avec les bonnes permissions
COPY --chown=nodejs:nodejs package*.json ./
RUN npm ci --only=production && npm cache clean --force

COPY --chown=nodejs:nodejs . .

# Changement d'utilisateur
USER nodejs

EXPOSE 3000
CMD ["npm", "start"]

Monitoring et observabilité :


# docker-compose.monitoring.yml
version: '3.8'

services:
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin

  cadvisor:
    image: gcr.io/cadvisor/cadvisor
    privileged: true
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

Intégration CI/CD


Docker 2024 améliore l'intégration avec les pipelines CI/CD modernes.

GitHub Actions avec Docker :


# .github/workflows/docker.yml
name: Docker Build and Push

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2
    
    - name: Build and push
      uses: docker/build-push-action@v4
      with:
        context: .
        push: true
        tags: ${{ secrets.DOCKER_REGISTRY }}/myapp:${{ github.sha }}
        cache-from: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/myapp:cache
        cache-to: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/myapp:cache,mode=max

GitLab CI avec Docker :


# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: "/certs"

docker-build:
  stage: build
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  script:
    - docker build -t myapp:$CI_COMMIT_SHA .
    - docker push myapp:$CI_COMMIT_SHA

Optimisations pour le Cloud


Docker 2024 apporte des optimisations spécifiques pour les environnements cloud.

Support Kubernetes natif :


# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest
        ports:
        - containerPort: 3000
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"

Métriques cloud :


  • Déploiement 70% plus rapide sur Kubernetes

  • Coûts réduits de 40% grâce aux optimisations

  • Monitoring intégré avec Prometheus et Grafana

Migration et Adoption


La migration vers Docker 2024 est progressive avec des outils de migration automatique.

Étapes de migration :


1. Mise à jour de Docker : Installation de la dernière version
2. Migration des Dockerfiles : Adoption des nouvelles syntaxes
3. Mise à jour des Compose files : Utilisation des nouvelles fonctionnalités
4. Optimisation : Application des meilleures pratiques

Exemple de migration :


# Ancien (Docker 2020)
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

# Nouveau (Docker 2024)
FROM node:18-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm \
    npm ci --only=production

FROM node:18-alpine
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
USER nodejs
EXPOSE 3000
CMD ["npm", "start"]

Impact sur l'Écosystème


Docker 2024 influence l'écosystème avec de nouvelles intégrations et outils.

Intégrations améliorées :


  • Kubernetes : Support natif des conteneurs Docker

  • AWS ECS : Optimisations pour les services AWS

  • Azure Container Instances : Déploiement simplifié

Outils de développement :


# Docker Desktop avec nouvelles fonctionnalités
docker version
docker info

# Outils de diagnostic
docker system df
docker system prune

# Monitoring
docker stats

Conclusion


Docker en 2024 représente l'évolution naturelle de la conteneurisation avec des fonctionnalités de sécurité renforcées, des performances optimisées et une intégration cloud native. Les développeurs qui adoptent ces nouvelles pratiques bénéficient d'applications plus sécurisées, plus performantes et plus faciles à déployer.

Tags

DockerConteneursDevOpsSécuritéProduction