Découvert par hasard, Modus est un langage permettant de créer des images de
conteneur Docker/OCI. Modus utilise la programmation logique pour exprimer
les interactions entre les paramètres de build, spécifier des workflows de
build complexes, paralléliser et mettre en cache automatiquement les
builds et aussi permet d’optimiser la taille des images produites.
Attention : c’est un projet encore sujet à des modifications importantes
pouvant amener à des dysfonctionnements !
Installation de modus
Il suffit d’utiliser le script du site pour installer modus. Je fais le choix de
l’installer dans le dossier .local/bin.
Ecrire un Modusfile
Un Modusfile, est comme un Dockerfile, un ensemble de directives qui
spécifient comment créer des images sauf que la syntaxe est totalement
différentes puisqu’elle s’appuie sur celle de
Datalog ↗ un langage de programmation
logique déclaratif.
Exemple de fichier Modusfile (repris du tutoriel de Modus) :
Les commentaires débutent par le #. Dans l’exemple ci-dessus, les instructions
équivalentes à un Dockerfile ont été écrites pour plus de clarté à l’aide de
commentaires.
Pour le reste tout est expliqué dans la
documentation ↗
de Modus (que je ne maitrise pas).
Build d’une image avec Modus
La CLI de modus permet de lancer le build des images, elle est de la forme
suivante :
Le contexte est comme avec docker, il indique depuis quel dossier on veut
construire l’image. La requête indique quelle image construite avec ses
paramètres.
Je vous propose de construire l’image de modus à partir de son projet :
Voici le contenu du builde :
On voit ici que ce Modusfile peut construire deux versions de l’image de
conteneur : modus et fronted. On peut les construire toutes les deux avec la
requete all.
On voit aussi que pour la version debug on peut ajouter des packages
supplémentaires nécessaires à ce mode. Cela permet en effet de réduire la taille
dees images de production, mais aussi de limiter la présence de package qui
pourrait poser des problèmes de sécurité. Allez on lance le build des images :
Pour builder aussi les images de debug, ajoutons le predicat debug. Ajoutons
l’option —json qui va nous permettre de tager les images :
Conclusion
Je trouve que modus offre des possibilités qui permettent d’optimiser la
production d’images OCI. C’est un outil en cours de développement et il manque
de quelques options comme tager les images directement. Par contre, encore un
nouveau langage à apprendre qui est bien différent de ceux que nous utilisons
habituellement. Donc à suivre.