Skip to content

Instantly share code, notes, and snippets.

@mosser
Last active September 6, 2016 12:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mosser/bf9e5e05e7fe4695a4f182c652da665b to your computer and use it in GitHub Desktop.
Save mosser/bf9e5e05e7fe4695a4f182c652da665b to your computer and use it in GitHub Desktop.
Composition d'Images Docker [PFE 2016]

Composition d'images Docker

  • Encadrant(s): Sébastien Mosser (I3S)

Parcours recommandés

  • AL: Architecture Logicielle

Description résumée

La technologie Docker permet de déployer très rapidement des applications en utilisant un système de conteneurs légers. Le packaging d'une application sous la forme d'un conteneur léger passe par la création d'une image de conteneur, construite au dessus d'une autre image puis customisée (1ère forme de composition). Il est aussi possible d'assembler des images dockers interagissant au sein de la même application a l'aide d'un fichier de composition liant les images entre elles (2nde forme de composition). L'objectif de de projet est d'analyser un ensemble d'applications Docker présent sur Github et de modéliser les compositions faite par les développeurs dans le contexte de cette technologie. Le projet est par essence exploratoire, et pourra être poursuivi en stage au laboratoire par un des participants selon les résultats obtenus dans le cadre du PFE (i.e., sera-t-il intéressant de poursuivre l'étude plus loin ?).

Description détaillée

Les conteneurs légers dans l'absolu et Docker en particulier ont pris un essor phénoménal ces dernières années. Dans cette technologie, il existe deux manière de composer des applications:

  1. Composition d'images: dans ce paradigme, un image déployable dans un conteneur est construite par dessus une autre image, à l'aide d'une DockerFile. Par exemple, l'image officielle de la base de données Postgresql est construite au dessus de l'image officielle d'une distribution Linux.
  2. Composition de conteneurs: Pour un ensemble d'image données, il est possible de les composer en explicitant comment elles sont liées pour produire l'application finale. Par exemple, pour déployer une application web app connectée à une base de données postgres, on créée une composition (à l'aide d'un fichier docker-compose.yml) permettant de déployer les deux images et les informations de connexion à la base de données depuis l'application.

Ce PFE fait la suite du stage de 4A de Fabien Vicente, qui a travaillé à la dockerisation de la pile logicielle Atlassian (i.e., crowd, bitbucket, jira, postgres et nginx) pour l'Université. Dans ce cadre, Fabien à eu l'opportunité d'amorcer l'étude des fichiers de compositions docker-compose.yml en créant un premier corpus de fichiers extraits depuis Github.

L'objectif du projet est de travailler sur les deux types de composition, en repartant du travail préliminaire de Fabien. Tout d'abord en identifiant dans l'état de la pratique (e.g., les descripteurs de composition disponibles sur GitHub) comment les développeurs utilisent cette technologie actuellement. Une classification des différents styles de composition sera effectuée sur ce travail pour catégoriser les différentes compositions faites dans la technologie. Le projet travaillera à créer un langage dédié permettant de composer de manière fiable des images et des conteneurs tout en faisant abstraction des détails techniques des technologies Docker.

Le projet est en lien direct avec les cours suivants du parcours AL : Architectures Logicielles (AL), RétroIngénierie, Maintenance & Évolution du Logiciel (RIMEL) et Langages Spécifiques aux Domaines (LSD). L'encadrement du projet sera fait en collaboration avec Benjamin Benni dont la thèse de doctorat porte sur des problématiques de composition logicielle.

Compétences requises

  • Geek-attitude (il va falloir fouiller dans des codes existants)
  • Rétro-ingénierie (comprendre comment les dévelopeurs utilisent Docker)
  • Modélisation (abstraction des compositions Docker)
  • Compilation (analyse lexicale et sémantique des fichiers existants)
  • (pour les SI: avoir suivi l'option DevOps en 4A serait une bonne idée)

Besoins clients

  • Étude du state of practice de la composition de conteneurs dans docker;
  • Définition d'un langage de plus haut niveau pour gérer les compositions dans Docker.

Résultats attendus

  • Méthodologie et opérationalisation de l'extraction des données depuis GitHub
  • Analyse automatisée des fichiers Dockerfile et docker-compose et classification
  • Définition d'un métamodèle permettant de modéliser les compositions
  • Exposition du métamodèle avec un langage spécifique au domaine (DSL)
  • Experimentation avec ce DSL pour modéliser et opérationaliser des composition docker (par exemple avec la pile logicielle Atlasssian déployée à l'UNS).

Références Bibliographiques

  1. https://www.docker.com/
  2. https://en.wikipedia.org/wiki/Domain-specific_language
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment