Article
· Déc 18 6m de lecture

Optimisation de l'empreinte de l'image Docker d'IRIS Community Edition

L'idée qui a obtenu le plus de votes sur le portail InterSystems Ideas Portal (74 votes) concerne la création d'une version allégée d'IRIS. Bien que la plateforme soit devenue un puissant moteur de données, de nombreux projets ne nécessitent que ses capacités de base de données SQL. Cet article explique comment créer une image IRIS Community Edition non officielle et compacte, axée uniquement sur les fonctionnalités de base de données essentielles, ce qui réduit la taille de l'image de plus de 80 %.

⚠️ Avertissement

Ce projet produit une image non officielle et expérimentale d'InterSystems IRIS Community Edition.

  • Il n'est ni pris en charge ni approuvé par InterSystems.
  • Vous l'utilisez à vos propres risques. Les modifications suppriment des fonctionnalités essentielles de la plate-forme et peuvent nuire à la compatibilité avec les outils, les API et les comportements attendus.
  • Aucune garantie n'est fournie, y compris en ce qui concerne l'adéquation à une utilisation en production.
  • Il est destiné uniquement à des fins éducatives et expérimentales par des utilisateurs avancés.

Pourquoi une version allégée d'IRIS?

Bien que la version actuelle d'IRIS offre de nombreuses fonctionnalités (interopérabilité, analyse, apprentissage automatique, gestion du système, etc.), de nombreux projets ne nécessitent que ses capacités SQL de base. L'image Docker officielle de la version Community Edition est approximativement la suivante:

  • Espace disque utilisé: 3,5 à 3,8 Go
  • Format compressé: ~1,1 Go

IRIS Light réduit ces valeurs à:

  • Espace disque utilisé: ~575 à 583 Mo
  • Format compressé: ~144 à 148 MoB

Ainsi, elle convient pour:

  • L'utilisation de microservices ou de SQL conteneurisé
  • Les pipelines CI avec un démarrage et un pull plus rapides
  • La mise à l'échelle horizontale lorsque toutes les fonctionnalités ne sont pas nécessaires

Comparaison de l'empreinte des images

Les images officielles IRIS Community Edition occupent généralement de 3,5 à 3,8 Go sur le disque, avec une compression d'environ 1,1 Go:

$ docker images containers.intersystems.com/intersystems/iris-community
IMAGE                                                                    ID             DISK USAGE   CONTENT SIZE
containers.intersystems.com/intersystems/iris-community:latest-cd        14c6314edcc5        3.8GB         1.17GB
containers.intersystems.com/intersystems/iris-community:latest-em        4c25627895eb       3.52GB         1.01GB
containers.intersystems.com/intersystems/iris-community:latest-preview   424e87dbb7d8       3.81GB         1.17GB

En revanche, l'image "IRIS Light" simplifiée créée à l'aide de cette approche est environ 8 fois inférieure en format compressé:

$ docker images caretdev/iris-community-light
IMAGE                                                                    ID             DISK USAGE   CONTENT SIZE
caretdev/iris-community-light:latest-cd                                  ce5c2d7fa173        583MB          148MB
caretdev/iris-community-light:latest-em                                  fd33a51a0e81        575MB          144MB
caretdev/iris-community-light:latest-preview                             f10c714117da        583MB          148MB

Analyse des couches d'image avec Dive

Pour comprendre et optimiser l'image IRIS Community Edition, nous avons utilisé dive, un outil d'inspection des couches d'images Docker et d'identification des inefficacités.

Avant l'optimisation: image de la version standard communautaire d'IRIS

La capture d'écran ci-dessous montre l'analyse de l'image officielle iris-community:latest-em. L'un des plus gros niveaux pèse 882 MO et contient Java, des bibliothèques système et d'autres composants d'exécution qui ne sont pas strictement nécessaires pour les charges de travail exclusivement SQL.

Et le plus gros, 1,5 Go, qui contient principalement IRIS lui-même.

Après optimisation : image IRIS Light

En supprimant les paquets inutiles et en compactant le stockage interne IRIS, l'image finale tient dans une seule couche de 320 Mo, ce qui permet une réduction considérable de la taille.

Construction de l'Image IRIS Light

Le processus suit un fichier Dockerfile en plusieurs étapes, à partir de la base standard iris-community:latest-em. Les étapes clés sont les suivantes:

1. Désactivation des composants dans la configuration

  • Désactivez WebServer, System Management Portal et Ensemble dans iris.cpf.

2. Suppression des packages inutilisés dans IRIS

Utilisation d'ObjectScript dans une session IRIS:

  • Supprimez les paquets: %SYS.ML, DeepSee, Interop, OAuth2, Net, Report, and more.
  • Ne conservez que les bibliothèques système essentielles (par exemple, %Library, %SQL, %SYSTEM).

3. Classes stub

SCertaines classes requises (par exemple, pour le démarrage) sont remplacées par des implémentations minimales sans opération si nécessaire.

4. Nettoyage des bases de données

Compactez et défragmentez les bases de données clés afin de réduire leur taille

5. Nettoyage du système de fichiers

Supprimez:

  • Outils de développement
  • Stack Web et CSP
  • Bibliothèques d'interopérabilité
  • Support Python/Java
  • Données de localisation, journaux, fichiers temporaires, pilotes ODBC/JDBC

6. Copie du contenu nettoyé vers une base Ubuntu vierge

L'image finale est construite au-dessus de ubuntu:24.04, n'inclut que les fichiers et outils nécessaires, et utilise tini comme PID 1.

Résultat

L'image obtenue est à peu près la suivante:

  • Format compressé: environ de 144 à 148 Mo
  • Espace disque non compressé: environ de 570 à 580 Mo
  • Fonctionnalité SQL: verifiée à l'aide de la suite de tests sqlalchemy-iris (619 tests réussis, 912 tests ignorés, 0 test échoués)

Ainsi, cette solution est particulièrement adaptée aux cas suivants:

  • Services SQL minimaux
  • Conteneurs de développement/test légers
  • Scénarios de déploiement intégrés ou périphériques
  • vArchitectures sans état évolutives horizontalement

Limitations importantes

  • Aucun portail de gestion ni services Web
    Toute la pile CSP/Web est supprimée.
  • Aucune interopérabilité, DeepSee, iKnow ou apprentissage automatique
    Ces sous-systèmes sont explicitement supprimés.
  • Aucune assistance interne ou externe
    InterSystems ne fournit aucune garantie pour cette image. La compatibilité et le comportement de mise à niveau ne sont pas définis.
  • Les futures versions d'IRIS peuvent modifier les exigences de démarrage
    Les dépendances internes aux paquets ou fichiers supprimés peuvent empêcher les futures versions de fonctionner avec cette approche.

Conclusion

IRIS Light est une image Docker simplifiée et communautaire pour InterSystems IRIS, qui réduit considérablement la taille et la complexité des cas d'utilisation centrés sur les bases de données. Bien qu'elle ne soit pas officiellement prise en charge, elle constitue une base pour l'expérimentation, le prototypage rapide et les cas où toutes les fonctionnalités d'IRIS ne sont pas nécessaires.

Les utilisateurs sont encouragés à examiner le fichier Dockerfile, à l'adapter à leurs propres besoins et à comprendre les implications de la suppression des fonctionnalités essentielles de la plateforme.

Les utilisateurs sont encouragés à personnaliser davantage le fichier Dockerfile afin de l'adapter à leurs propres contraintes opérationnelles et de sécurité. Le processus de compilation complet est transparent et reproductible à l'aide des seules images de base Docker disponibles publiquement.


Le projet est disponible ici:  

Images Docker IRIS Community Light disponibles sur Docker Hub 

Discussion (0)2
Connectez-vous ou inscrivez-vous pour continuer