🐳 Transition vers containers — Askem

La transition vers les containers permet grâce à Askem d’assurer la portabilité, la stabilité et la scalabilité de ses environnements de développement et de production. En s’appuyant sur Docker et Docker Compose, cette démarche unifie les pratiques internes et facilite la collaboration entre les équipes projets, notamment sur les instances Drupal, CKAN, Superset ou encore les microservices internes.


Principes généraux

  • Isolation : chaque application (Drupal, PostgreSQL, Redis, Solr, etc.) tourne potentiellement dans un container indépendant.
  • Interopérabilité : les environnements sont alignés avec le cluster Rancher/Kubernetes.
  • Reproductibilité : tout développeur peut cloner et lancer une instance locale avec docker compose up.
  • Automatisation : des scripts assurent les tâches répétitives (init, mise à jour, synchro, etc.).
  • Séparation : code, volumes de données et paramètres d’environnement sont distincts.

Nous accompagnos nos clients dans la transformation de leurs applicatifs vers des images docker


🧩 Exemple : instance Drupal containerisée

project-root/
├── docker-compose.yml
├── drupal/
│   ├── Dockerfile
│   ├── web/
│   │   └── (code Drupal)
│   ├── scripts/
│   │   ├── install.sh
│   │   ├── update.sh
│   │   └── sync-local.sh
├── db/
│   └── Dockerfile
├── .env
└── README.md
    

Extrait du docker-compose.yml :

services:
  drupal:
    build: ./drupal
    ports:
      - "8080:80"
    environment:
      - DRUPAL_DB_HOST=db
      - DRUPAL_DB_NAME=drupal
      - DRUPAL_DB_USER=drupal
      - DRUPAL_DB_PASSWORD=drupal
    volumes:
      - ./drupal/web:/var/www/html:delegated
      - ./drupal/config:/opt/config
      - ./drupal/modules:/var/www/html/modules/custom
      - ./drupal/themes:/var/www/html/themes/custom
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=drupal
      - POSTGRES_USER=drupal
      - POSTGRES_PASSWORD=drupal
    volumes:
      - drupal_data:/var/lib/postgresql/data

volumes:
  drupal_data:
    

Montages pour le développement local

Répertoire local Monté dans le container Usage
./drupal/web/var/www/htmlCode source principal
./drupal/modules/var/www/html/modules/customModules personnalisés
./drupal/themes/var/www/html/themes/customThèmes Drupal
./drupal/config/opt/configConfiguration import/export
./logs/var/log/apache2Logs d’exécution
.envVariables injectéesConfiguration environnementale

Procédures de mise à jour

  • Mise à jour du code : git pull && docker compose build drupal && docker compose up -d
  • Dépendances : docker compose exec drupal composer install && drush updb -y && drush cr
  • Configuration : drush config:export -y / config:import -y
  • Backup : docker compose exec db pg_dump -U drupal drupal > backup.sql

Scripts de facilitation

ScriptDescription
install.shInstalle une instance Drupal neuve
update.shMet à jour dépendances et configuration
sync-local.shSynchronise la base et les médias depuis la préprod
reset.shRéinitialise un environnement local
build-all.shReconstruit tous les containers

Intégration CI/CD

Les pipelines GitLab utilisent les mêmes images Docker que les environnements locaux. Le déploiement est orchestré via Helm sur le cluster Rancher, avec publication automatique sur le registry de votre choix.

Sécurité et maintenance

  • Secrets gérés via .env et Vault Kubernetes.
  • Nettoyage automatique des containers inactifs.
  • Mises à jour régulières des images.
  • Analyse de vulnérabilité automatisée (Trivy en CI/CD).
  • Backups automatiques des volumes Docker.
  • Intégration des modules préconfigurés (composer.json).