Optimisation de l'empreinte de l'image Docker d'IRIS Community Edition
.png)
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.
.png)
Et le plus gros, 1,5 Go, qui contient principalement IRIS lui-même.
.png)
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.
.png)
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