Docker – Comment intégrer un Custom Script dans docker compose avant de lancer l’entrypoint officiel

Introduction

Dans des scénarios où la modification directe d’un Dockerfile ou d’une image Docker n’est pas envisageable, il peut être nécessaire d’injecter des configurations ou des modifications spécifiques avant le démarrage de l’application principale. Cet article vous montre comment intégrer un script personnalisé dans le processus de démarrage d’un conteneur Docker en utilisant Docker Compose, permettant de modifier des configurations ou d’exécuter des tâches spécifiques avant de lancer l’entrypoint officiel de l’image.

Pourquoi Utiliser un Custom Script?

L’utilisation d’un script personnalisé avant l’exécution de l’entrypoint officiel peut être utile pour plusieurs raisons:

  • Configuration Dynamique: Modifier les configurations de l’application basées sur des variables d’environnement ou des paramètres externes.
  • Pré-Validation: Vérifier ou modifier des paramètres, des fichiers de configuration, ou des permissions.
  • Compatibilité et Sécurité: Adapter l’ancienne logique d’initialisation pour maintenir la compatibilité avec les nouvelles versions de base de l’application ou pour renforcer les mesures de sécurité.

Comment Configurer Docker Compose?

Création du Script Personnalisé:

  • Écrivez un script bash custom-entrypoint.sh qui fait les modifications nécessaires. Par exemple, pour modifier une variable de configuration Java avant le démarrage de l’application. Par exemple :
#!/bin/bash

# Chemin du fichier à modifier
FILE="/opt/JavaServer"

# Modification de la variable changer la valeur maxsize
sed -i 's/-Dcom.sun.jndi.ldap.connect.pool.maxsize=[0-9]* /-Dcom.sun.jndi.ldap.connect.pool.maxsize=300 /g' $FILE

# Appel de l'entrypoint original (supposons que c'est entrypoint.sh)
exec /path/to/original/entrypoint.sh "$@"
  • Ce script utilise sed pour remplacer la valeur de maxsize à la valeur 300 directement dans le fichier. Assurez-vous de corriger le chemin de l’entrypoint original selon votre configuration.
  • Il est crucial que le chemin vers l’entrypoint original (/path/to/original/entrypoint.sh) soit correct et que vous passiez "$@" pour transmettre tous les arguments initiaux au script original.

Rendre le Script Exécutable:

  • Assurez-vous que le script est exécutable :
chmod +x custom-entrypoint.sh

Modifier le Docker Compose:

  • Ajoutez le script en tant que nouveau entrypoint dans votre fichier docker-compose.yml:
version: '3.8'
services:
  your-service:
    image: your-image-name
    volumes:
      - ./custom-entrypoint.sh:/custom-entrypoint.sh
    entrypoint: ["/custom-entrypoint.sh"]

Conclusion

Intégrer un script personnalisé dans Docker Compose offre une flexibilité significative pour les opérations de pré-démarrage sans nécessiter de reconstruire ou de modifier directement les images Docker existantes. Cette approche est particulièrement utile dans les environnements de production ou lors de l’utilisation de services tiers où les modifications directes sont limitées.