Comment déployer des applications Docker multi-conteneurs

DockerBeginner
Pratiquer maintenant

Introduction

Docker Compose est un outil essentiel pour les développeurs souhaitant rationaliser la gestion des conteneurs et le déploiement des applications. Ce tutoriel complet explore les bases de Docker Compose, fournissant des informations pratiques sur la configuration, le déploiement et la gestion d'environnements multi-conteneurs complexes de manière efficace et systématique.

Notions de base de Docker Compose

Introduction à Docker Compose

Docker Compose est un outil puissant pour définir et exécuter des applications Docker multi-conteneurs. Il permet aux développeurs d'utiliser un fichier YAML pour configurer les services, les réseaux et les volumes d'application, simplifiant ainsi le processus d'orchestration et de gestion des conteneurs.

Concepts et architecture de base

graph TD
    A[Docker Compose] --> B[Configuration des services]
    A --> C[Gestion multi-conteneurs]
    A --> D[Infrastructure déclarative]
Concept clé Description
docker-compose.yml Fichier de configuration définissant les services, réseaux et volumes
Services Conteneurs individuels qui composent une application
Volumes Stockage de données persistant pour les conteneurs
Réseaux Configurations de réseaux personnalisés pour la communication entre conteneurs

Exemple pratique : Configuration d'une application web

Voici un exemple complet démontrant la configuration Docker Compose pour une application web typique :

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

Décomposition du code

  1. version: '3.8' spécifie le format du fichier Docker Compose
  2. La section services définit deux conteneurs : le serveur web et la base de données
  3. Le service nginx mappe le port hôte 80 au port conteneur 80
  4. Le service postgres configure une base de données avec un stockage de volume persistant

Installation et commandes de base

Pour installer Docker Compose sur Ubuntu 22.04 :

sudo apt update
sudo apt install docker-compose-plugin
docker compose version

Commandes Docker Compose clés :

  • docker compose up : Démarre tous les services
  • docker compose down : Arrête et supprime les conteneurs
  • docker compose ps : Liste les services en cours d'exécution
  • docker compose logs : Affiche les journaux des services

Configuration et Déploiement

Structure du fichier Docker Compose

La configuration Docker Compose repose sur un fichier YAML qui définit l'infrastructure complète de l'application. Le fichier standard est nommé docker-compose.yml et contient des définitions de services complètes.

graph TD
    A[docker-compose.yml] --> B[Services]
    A --> C[Réseaux]
    A --> D[Volumes]
    A --> E[Variables d'environnement]

Exemple détaillé de configuration de service

version: "3.8"
services:
  backend:
    image: python:3.9
    build:
      context: ./backend
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    environment:
      - DATABASE_URL=postgresql://user:password@database:5432/appdb
    depends_on:
      - database

  database:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: secretpassword

volumes:
  postgres_data:

Paramètres de configuration

Paramètre Description Exemple
image Image de conteneur de base nginx:latest
build Configuration de construction d'image personnalisée context: ./app
ports Mappage de ports "8080:80"
volumes Stockage de données persistant - ./data:/app/data
environment Variables d'environnement du conteneur DATABASE_HOST=localhost

Stratégies de déploiement

graph LR
    A[Développement local] --> B[Environnement de pré-production]
    B --> C[Déploiement de production]
    C --> D[Mise à l'échelle des services]

Commandes de déploiement

Flux de travail de déploiement typique sur Ubuntu 22.04 :

## Valider le fichier compose
docker compose config

## Construire les services
docker compose build

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

## Vérifier les services en cours d'exécution
docker compose ps

## Afficher les journaux
docker compose logs backend

## Arrêter les services
docker compose down

Techniques de configuration avancées

services:
  webserver:
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

Stratégies Compose Avancées

Configuration multi-environnement

Docker Compose prend en charge la gestion sophistiquée des environnements grâce à plusieurs fichiers de configuration et à des mécanismes de substitution.

graph LR
    A[Configuration de base] --> B[Substitution de développement]
    A --> C[Substitution de production]
    A --> D[Substitution de pré-production]

Configuration spécifique à l'environnement

version: "3.8"
services:
  application:
    image: myapp:latest
    environment:
      - APP_ENV=${DEPLOY_ENV:-development}
      - DATABASE_URL=${DATABASE_CONNECTION}

Mise à l'échelle dynamique des services

## Mettre à l'échelle le service web à 3 instances
docker compose up -d --scale web=3

Configurations de réseau avancées

Mode de réseau Description Cas d'utilisation
bridge Réseau par défaut Communication isolée entre conteneurs
host Réseau hôte direct Scénarios hautes performances
custom Réseaux définis par l'utilisateur Architectures de microservices complexes

Exemple Compose prêt pour la production

version: '3.8'
services:
  webserver:
    image: nginx:alpine
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

  backend:
    image: myapp:${VERSION}
    secrets:
      - db_password
    configs:
      - source: app_config
        target: /app/config.json

secrets:
  db_password:
    external: true

configs:
  app_config:
    file: ./config.json

Stratégies de versionnement des conteneurs

## Taguer et pousser les images versionnées
docker build -t myapp:v1.0 .
docker compose push

Flux de travail de déploiement

graph TD
    A[Construire les images] --> B[Exécuter les tests]
    B --> C[Poussez vers le registre]
    C --> D[Déployer les conteneurs]
    D --> E[Surveiller les performances]

Commandes de sécurité et de conformité

## Analyser les services compose pour les vulnérabilités
docker compose config --resolve-env-vars
docker scan docker-compose.yml

Résumé

En maîtrisant Docker Compose, les développeurs peuvent simplifier l'orchestration des conteneurs, définir l'infrastructure en tant que code et créer des environnements applicatifs évolutifs et reproductibles. Ce tutoriel couvre les concepts fondamentaux, les stratégies de configuration et les techniques de mise en œuvre pratiques qui permettent un développement et un déploiement d'applications multi-conteneurs transparents dans différents scénarios d'infrastructure.