<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alan.Damotte</id>
	<title>air - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alan.Damotte"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php/Special:Contributions/Alan.Damotte"/>
	<updated>2026-06-10T15:14:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28296</id>
		<title>File:Transparents IaaS.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28296"/>
		<updated>2016-03-17T14:36:25Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: Alan.Damotte uploaded a new version of &amp;amp;quot;File:Transparents IaaS.pdf&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28267</id>
		<title>File:Transparents IaaS.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28267"/>
		<updated>2016-03-17T11:51:26Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: Alan.Damotte uploaded a new version of &amp;amp;quot;File:Transparents IaaS.pdf&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28266</id>
		<title>File:Transparents IaaS.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28266"/>
		<updated>2016-03-17T11:41:50Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: Alan.Damotte uploaded a new version of &amp;amp;quot;File:Transparents IaaS.pdf&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28151</id>
		<title>File:Transparents IaaS.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28151"/>
		<updated>2016-03-17T09:41:27Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: Alan.Damotte uploaded a new version of &amp;amp;quot;File:Transparents IaaS.pdf&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28121</id>
		<title>File:Transparents IaaS.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Transparents_IaaS.pdf&amp;diff=28121"/>
		<updated>2016-03-17T09:06:20Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=28101</id>
		<title>Projets 2015-2016</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=28101"/>
		<updated>2016-03-17T07:40:53Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Projets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2014-2015]] | [[Projets]] | [[Projets 2016-2017]]&amp;gt;&amp;gt;&lt;br /&gt;
=RICM=&lt;br /&gt;
==RICM3==&lt;br /&gt;
&lt;br /&gt;
==RICM4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi 7 mars&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: vous creusez la question, vous contactez l&#039;auteur du code si il y a lieux, vous faites un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), vous soumettez un patch, vous contactez l&#039;enseignant ou la personne suivant le projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle &lt;br /&gt;
indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par ricm4_2015_2016.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez utiliser un logiciel de gestion de version&#039;&#039;&#039; pour vos développements comme [http://en.wikipedia.org/wiki/Git_%28software%29 git ] et nous vous conseillons d&#039;utiliser le site [https://github.com github] pour l&#039;hébergement de votre dépôt public.&lt;br /&gt;
&lt;br /&gt;
* Les document public (exemple sur github) doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[Dashboard pour gestionnaire de tâches et de ressources]]&lt;br /&gt;
 | CROUZET, MATHIEU&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-DashBoard| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/MatthieuCrouzet/Projet4A &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_groupe1.pdf|Rapport Consultant]] - [[Media:Paterns.pdf|Patterns]] - [[Media:PresentationDashboard.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Speeding Simplified Script Language]]&lt;br /&gt;
 | POPEK, BERTRAND-DALECHAMPS, WEI&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-SSSL| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SSSL-UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/FlorianPO/Speeding-Simplified-Script-Language.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:Groupe2_AIR.pdf|Rapport Consultant]] - [[Media:PresentationProjet.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Borne interactive]] &lt;br /&gt;
 | DUNAND - NAVARRO - REVEL&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Borne-Interactive| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive/UML_Diagrams | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Kant73/InteractiveDisplay &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:IPopo.pdf|Rapport Consultant]] - [[Media:PatternDesign.pdf | &#039;&#039;&#039;Design Pattern&#039;&#039;&#039;]] - [[Media:PresentationInteractiveDisplay.pdf|Présentation Intermédiaire]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Sonotone]]&lt;br /&gt;
 | LECORPS, VOUTAT, Hattinguais	&lt;br /&gt;
 | Maisonnasse, Richard&lt;br /&gt;
 | [[Projets-2015-2016-Sonotone| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]  - [[Projets-2015-2016-Sonotone-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]]  &lt;br /&gt;
 | [https://github.com/Gorgorot38/Sonotone-RICM4 &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SRS_Consultant_Sonotone_4.pdf|Rapport_Consultant]] - [[Media:pattern_sonotone.pdf|Pattern]] - [[Media:Soutenance.pdf|Soutenance_miparcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Sous-titre_en_temps_r%C3%A9el_d%27un_cours| Sous-titre d&#039;un cours en temps réel]]&lt;br /&gt;
 | LECHEVALLIER, BUI, OUNISSI &lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[LiveSubtitles| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lechevallier/RealTimeSubtitles &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media: SRS_Groupe_5.pdf| Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[GrenobloisFuté]]&lt;br /&gt;
 | MOURET, DELAPORTE,  Lucidarme&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[GrenobleFuté| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lucidarme/Osmand.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_G14.pdf|Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Streaming en stéréoscopie]]&lt;br /&gt;
 | ZHAO ZILONG, HAMMOUTI&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Streaming-Stereoscopie| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Streaming en stéréoscopie | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/zhao-zilong/streaming_stereo &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:bruel_medewou_ndiaye.pdf|Rapport_consultant]] - [[Media:streaming.pdf|mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[PersyCup2016]]&lt;br /&gt;
 | BIN, ZEGAOUI, ELLAPIN &lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[PersyCup| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/legominstorm/lego &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SoutenanceMiParcours-Persycup2016.pdf|Soutenance Mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Services étendus pour le modèle de composants iPOPO pour Python]]&lt;br /&gt;
 | FOUNAS, HALLAL, GATTAZ &lt;br /&gt;
 | Calmant &amp;amp; Donsez&lt;br /&gt;
 | [[Proj-2015-2016-Extensions_IPOPO | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/abdelazizFounas/ipopo/tree/tlsremote &#039;&#039;&#039;github IPOPO&#039;&#039;&#039;] &amp;lt;br /&amp;gt; [https://github.com/gattazr/IPOPO-Remote-Client &#039;&#039;&#039;github IPOPO Client&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:9_RapportProjet.pdf|Rapport]] - [[Media:9_TransparentsProojet.pdf|Transparents]] - [[Media:9_FlyerProjet.pdf|Flyer]] - [[Media:3-SRS-Pres.pdf| Rapport Consultant]] - [[Media:9_PatternStrat.pdf|Pattern Design]] - [[Media:9_Mid-Presentation.pdf|Mid Presentation]] - [[Media:9_Gantt.pdf|Gantt]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[IndoorGeoloc2016]]&lt;br /&gt;
 | ARRADA - CRASTES - FAURE - STOIAN					&lt;br /&gt;
 | Donsez&lt;br /&gt;
 | [[Proj-2015-2016-IndoorGeoloc/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-IndoorGeoloc/SRS|SRS]]&lt;br /&gt;
 | [https://github.com/QuentinFA/Geoloc_Indoor &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Proj-2015-2016-IndoorGeoloc/RapportProjet.pdf|Rapport]] - [[Media:Proj-2015-2016-IndoorGeoloc/TransparentsProjet.pdf|Transparents]] - [[Media:Proj-2015-2016-IndoorGeoloc/FlyerProjet.pdf|Flyer]] - [[Media: SRSGroupe17.pdf| Rapport Consultant]] - [[Media:Mi_parcours.pdf|Mid presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[UPnPOpenHAB2016]]&lt;br /&gt;
 | Medewou , Ndiyae Yacine , Bruel Anna &lt;br /&gt;
 | Didier Donsez &amp;amp; Jérome Maisonnasse&lt;br /&gt;
 | [[Proj-Openhab-2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Int%C3%A9gration_de_cam%C3%A9ra_de_surveillance_UPnP_%C3%A0_Openhab/SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-Openhab/UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/openHab-UPnP &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_ZHAO_HAMMOUTI.pdf|Rapport Consultant]] - [[Media:pattern_ZHAO_HAMMOUTI.pdf|Patterns]] - [[Media:fichier.pdf|Mini soutenance]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[Sign2Speech]]&lt;br /&gt;
 | NIOGRET, NOGUERON, TITH&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[sign2speech_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Sign2Speech | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/SignToSpeech-Project &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:12-Sign2Speech-RapportConsultant.pdf|Rapport Consultant]] - [[Media:12-Sign2Speech-MidPres.pdf|Mid presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[AstroImage]] &lt;br /&gt;
 | RACHEX, BLANC, GERRY&lt;br /&gt;
 | Olivier Richard et Bruno Bzeznik&lt;br /&gt;
 | [[Proj-2015-2016-Astroimage/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[AstroImage/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Media:AstroImage-UML.pdf | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/nicolas-blanc/AstroImage &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:13-AstroImage-RapportConsultant.pdf|Rapport Consultant]] - [https://docs.google.com/presentation/d/15F8DRktwmOuSNabdxMASniyr-TIiRzGNNG1mOhcoSnk/edit?usp=sharing &#039;&#039;&#039;Patterns&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[Tachymètre]]&lt;br /&gt;
 | MACE, NOUGUIER, RAMEL&lt;br /&gt;
 | Olivier Gattaz&lt;br /&gt;
 | [[Fiche - Tachymètre | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Tachymètre| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - Tachymètre| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Quego/Tachymetre &#039;&#039;&#039;github - Tachymètre&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:srs_tachymetre.pdf|Rapport consultant]] - [[Media:14_PatternDesign.pdf‎ | Pattern Design]] - [[Media:Tachymetre_Presentation.pdf‎ | Présentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[SmartProjector]]&lt;br /&gt;
 | BRANGER, HABLOT&lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[Fiche_SmartProjector_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - SmartProjector| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - SmartProjector| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/P0ppoff/SmartProjector &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Rapport]] - [[Media:PresentationPorjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:Gl_groupe16.pdf|Rapport Consultant]] - [http://air.imag.fr/index.php/Patron_de_conception_-_SmartProjector patterns]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Liste de projets===&lt;br /&gt;
&lt;br /&gt;
* [[Dashboard pour gestionnaire de tâches et de ressources]], Olivier Richard&lt;br /&gt;
* [[Moteur distribué d&#039;exécution de commande]], Olivier Richard&lt;br /&gt;
* [[Environnement d&#039;expérimentation de pour NVIDIA Shield (Tegra X1)]], Olivier Richard   &lt;br /&gt;
* [[Speeding Simplified Script Language]], Olivier Richard&lt;br /&gt;
&lt;br /&gt;
* Aide (Open-Source)au Handicap Auditif, avec Didier Donsez, Jérome Maisonnasse, Marie-Paule Balicco (SAH UGA) et Nicolas Vuillerme&lt;br /&gt;
** [[Borne interactive]] (1 sujet)&lt;br /&gt;
** [[Sonotone]] (1 sujet)&lt;br /&gt;
** [[Sous-titre en temps réel d&#039;un cours]] (1 sujet)&lt;br /&gt;
* [[GrenobloisFuté]] Couche trafic sur OsmAnd avec un greffon. Données dynamique de la métro. Dvp Android. Nicolas Palix.&lt;br /&gt;
* [[GeoDiff]] Production, visualisation, fusion de variations (diff) sur de l&#039;information géocodée : Nicolas Palix&lt;br /&gt;
* [[Smart campus augmenté et contributif]] Didier Donsez, Vivien Quema&lt;br /&gt;
&lt;br /&gt;
* [[Streaming en stéréoscopie]] sur [[WebRTC]] avec rendu sur [[Oculus]] pour le robot [[RobAIR]], Jérôme Maisonnasse. ([http://gstconf.ubicast.tv/videos/stereoscopic-3d-video/ voir]).&lt;br /&gt;
* [[STM32F7]] : Mise en oeuvre de la chaîne de compilation sous Linux avec [[OpenSTM32]] et [[OpenOCD]]. Nicolas Palix&lt;br /&gt;
* [[PersyCup2016]] : Persyval Robocup, Didier Donsez, Vivien Quema, Jérome Maisonnasse. (3 étudiants)&lt;br /&gt;
* [[Services étendus pour le modèle de composants iPOPO pour Python]], Didier Donsez &amp;amp; Thomas Calmant. (2 étudiants)&lt;br /&gt;
* [[SmartClassRoom2016|Développement d&#039;une interface partagée pour tables tactiles (projet SmartClassRoom)]], Didier Donsez, Jérôme Maisonnasse. (2 étudiants)&lt;br /&gt;
* [[iRock2016|iRock : surveillance de glissement de terrains]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[IndoorGeoloc2016|Géolocalisation in-door au moyen de balises (beacon) BLE et Wifi à base de STM32 et de balises iBeacon &amp;amp; AltBeacon]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[UPnPOpenHAB2016|Intégration et gestion de caméras de surveillance UPnP dans la plateforme domotique open-source OpenHAB et myOpenHAB]], Didier Donsez &amp;amp; Jérome Maisonnasse.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projets non prioritaires&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Liveprogramming with Kivy]], Olivier Richard&lt;br /&gt;
* [[AstroImage]] production d&#039;image d&#039;astronomie, Olivier Richard et Bruno Bzeznik&lt;br /&gt;
* [[G-code Cruncher]] Controle de machine CNC (Nucleo grbl + esp8266 + Sdcard), Olivier Richard&lt;br /&gt;
* [[Intégration OpenHAB / OpenTele]] Nicolas Palix&lt;br /&gt;
&lt;br /&gt;
==RICM5==&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignant responsable : Didier Donsez&lt;br /&gt;
&lt;br /&gt;
Démarrage : Lundi 25/01 à 10H30-12H30, P253 (Rendez-vous devant la salle AIR) - Visioconf pour Thibaut Cordier&lt;br /&gt;
&lt;br /&gt;
Soutenance : Jeudi 17/03 à 13H00-17H00, salle P043 (Polytech Grenoble)puis en salle C005 (Batiment C) &lt;br /&gt;
&lt;br /&gt;
Etudiants : RICM5 + 8 étudiants Avosti DUT RT&lt;br /&gt;
&lt;br /&gt;
Rappel séances MPI&lt;br /&gt;
* Séance 1 : mardi 26 janvier après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 2 : mardi 2 février après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 3 : lundi 8 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 4 : jeudi 11 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 5 : lundi 21 mars matin - Stéphanie Diligent et Emmanuelle Tréhoust&lt;br /&gt;
&lt;br /&gt;
=====Soutenances=====&lt;br /&gt;
Planning:&lt;br /&gt;
* Bossa (13H00-13H40 en salle P043)&lt;br /&gt;
* Immersion EDF (13H45-14H25 en salle P043)&lt;br /&gt;
* IaaS Docker (14H30-15H10 en salle P043)&lt;br /&gt;
* SmartCampus (15H15-15H55 en salle P043 et salle P259 AIR)&lt;br /&gt;
* SmartClassRoom (16H15-16H55 en C005)&lt;br /&gt;
* Pot d&#039; &amp;quot;Au Revoir&amp;quot; (17H00-1800 en C005)&lt;br /&gt;
&lt;br /&gt;
Instructions:&lt;br /&gt;
*Chaque soutenance comporte 15 minutes de présentation, 15 minutes de démonstration et 10 minutes de questions. Un transparent doit être consacré au travail confié et réalisé par les étudiants en DUT (AVOSTI).&lt;br /&gt;
* Répétez plusieurs fois votre présentation et votre démonstration.&lt;br /&gt;
* L&#039;ensemble des documents (y compris photos, vidéos et &#039;&#039;[[Logiciels#Screencast|screencast]]s&#039;&#039;) doivent être accessibles depuis le tableau ci-dessous et dans chaque fiche de suivi. Prévoyez une copie sur clé USB.&lt;br /&gt;
* Les étudiants vous accompagnent lors de votre soutenance.&lt;br /&gt;
* &#039;&#039;&#039;TOUT Le matériel prêté devra être rapporté et restitué dans un sac cabas lors de la soutenance.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====Projets=====&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM5 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Documents&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [http://air.imag.fr/index.php/IaaS_collaboratif_avec_Docker IaaS - Docker]&lt;br /&gt;
 | Eudes Robin, Damotte Alan, Barthelemy Romain, Mammar Malek, Guo Kai&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-IaaS_Docker| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-IaaS_Docker-SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/EudesRobin/iaas-collaboratif  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportMPI_Iaas.pdf|Rapport MPI]] - [[Media:Transparents_IaaS.pdf|Transparents]] - [[Media:Flyer_IaaS.pdf|Flyer]] - [https://youtu.be/qtqgZNrgcRc  &#039;&#039;&#039;Screencast&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [http://air.imag.fr/index.php/Portage_de_Bossa Portage de Bossa sur le Kernel Linux 4x]&lt;br /&gt;
 | Eric Michel Fotsing, Ombeline Rossi, Longfei Yao&lt;br /&gt;
 | Nicolas Palix, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-Portage_Bossa| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-Portage_Bossa-SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/ZenithKaizer/  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Rapport_Bossa.pdf|Rapport]] - [[Media:Transparents_Bossa.pdf|Transparents]] - [[Media:Flyer_Bossa.pdf|Flyer]] - Photos - Vidéos &lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Visite immersive en réalité virtuelle dans une usine avec EDF]]&lt;br /&gt;
 | Adam Christophe, Aissanou Sarah, Klipffel Tararaina, Qian Jean, Zominy Laurent&lt;br /&gt;
 | Didier Donsez, Georges-Pierre Bonneau, Thibaut Cordier (EDF)&lt;br /&gt;
 | [[Projets-2015-2016-VisiteImmersiveEDF| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/VisiteImmersiveEDF  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetX.pdf|Rapport]] - [[Media:TransparentsProojetX.pdf|Transparents]] - [[Media:FlyerProjetX.pdf|Flyer]] - Photos - Vidéos&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Contribution à OpenSmartCampus]] (voir http://data.beta.metropolegrenoble.fr/)&lt;br /&gt;
 | Quentin Torck, Vivien Michel, Jérémy Hammerer, Rama Codazzi, Zhengmeng Zhang&lt;br /&gt;
 | Didier Donsez, Vivien Quéma&lt;br /&gt;
 | [[Projets-2015-2016-OpenSmartCampus| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/quentin74/SmartCampus.git  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetOpenSmartCampus2016.pdf|Rapport]] - [[Media:TransparentsProojetOpenSmartCampus2016.pdf|Transparents]] - [[Media:FlyerProjetOpenSmartCampus2016.pdf|Flyer]]  - Photos - Vidéos&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Contribution à SmartClassRoom]] (Interfaces tactiles distribuées et partagées)&lt;br /&gt;
 | Saussac Thibault, Toussaint Sébastien, Hamdani Youcef, Zoppello Sebastien, Melik sak, Mesnier Vincent&lt;br /&gt;
 | Jérôme Maisonnasse, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-SmartClassRoom| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-SmartClassRoom/SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/XXXX  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetSmartClassRoom.pdf|Rapport]] - [[Media:TransparentsProjetSmartClassRoom.pdf|Transparents]] - [[Media:FlyerProjetSmartClassRoom.pdf|Flyer]]   - Photos - [https://youtu.be/FEwoA4S9rsM  &#039;&#039;&#039;Screencast/Vidéo&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Projets annulés et reportés===&lt;br /&gt;
* Projet avec [[Tango Project]] (Annulé)&lt;br /&gt;
* Hack the Beam, Didier Donsez &amp;amp; Jérôme Maisonnasse.&lt;br /&gt;
* [[Algorithmes de suivi de personnes pour robot de téléprésence RobAIR]] (Jérôme Maisonnasse, Didier Donsez)&lt;br /&gt;
&lt;br /&gt;
=M2PGI=&lt;br /&gt;
==[[Projets M2PGI Services Machine-to-Machine|Projet Services Machine-to-Machine]]==&lt;br /&gt;
* [[PM2M/2016/TP|Sujet et groupes]]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=28100</id>
		<title>Projets 2015-2016</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=28100"/>
		<updated>2016-03-17T07:38:43Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Projets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2014-2015]] | [[Projets]] | [[Projets 2016-2017]]&amp;gt;&amp;gt;&lt;br /&gt;
=RICM=&lt;br /&gt;
==RICM3==&lt;br /&gt;
&lt;br /&gt;
==RICM4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi 7 mars&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: vous creusez la question, vous contactez l&#039;auteur du code si il y a lieux, vous faites un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), vous soumettez un patch, vous contactez l&#039;enseignant ou la personne suivant le projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle &lt;br /&gt;
indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par ricm4_2015_2016.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez utiliser un logiciel de gestion de version&#039;&#039;&#039; pour vos développements comme [http://en.wikipedia.org/wiki/Git_%28software%29 git ] et nous vous conseillons d&#039;utiliser le site [https://github.com github] pour l&#039;hébergement de votre dépôt public.&lt;br /&gt;
&lt;br /&gt;
* Les document public (exemple sur github) doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[Dashboard pour gestionnaire de tâches et de ressources]]&lt;br /&gt;
 | CROUZET, MATHIEU&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-DashBoard| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/MatthieuCrouzet/Projet4A &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_groupe1.pdf|Rapport Consultant]] - [[Media:Paterns.pdf|Patterns]] - [[Media:PresentationDashboard.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Speeding Simplified Script Language]]&lt;br /&gt;
 | POPEK, BERTRAND-DALECHAMPS, WEI&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-SSSL| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SSSL-UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/FlorianPO/Speeding-Simplified-Script-Language.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:Groupe2_AIR.pdf|Rapport Consultant]] - [[Media:PresentationProjet.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Borne interactive]] &lt;br /&gt;
 | DUNAND - NAVARRO - REVEL&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Borne-Interactive| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive/UML_Diagrams | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Kant73/InteractiveDisplay &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:IPopo.pdf|Rapport Consultant]] - [[Media:PatternDesign.pdf | &#039;&#039;&#039;Design Pattern&#039;&#039;&#039;]] - [[Media:PresentationInteractiveDisplay.pdf|Présentation Intermédiaire]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Sonotone]]&lt;br /&gt;
 | LECORPS, VOUTAT, Hattinguais	&lt;br /&gt;
 | Maisonnasse, Richard&lt;br /&gt;
 | [[Projets-2015-2016-Sonotone| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]  - [[Projets-2015-2016-Sonotone-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]]  &lt;br /&gt;
 | [https://github.com/Gorgorot38/Sonotone-RICM4 &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SRS_Consultant_Sonotone_4.pdf|Rapport_Consultant]] - [[Media:pattern_sonotone.pdf|Pattern]] - [[Media:Soutenance.pdf|Soutenance_miparcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Sous-titre_en_temps_r%C3%A9el_d%27un_cours| Sous-titre d&#039;un cours en temps réel]]&lt;br /&gt;
 | LECHEVALLIER, BUI, OUNISSI &lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[LiveSubtitles| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lechevallier/RealTimeSubtitles &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media: SRS_Groupe_5.pdf| Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[GrenobloisFuté]]&lt;br /&gt;
 | MOURET, DELAPORTE,  Lucidarme&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[GrenobleFuté| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lucidarme/Osmand.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_G14.pdf|Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Streaming en stéréoscopie]]&lt;br /&gt;
 | ZHAO ZILONG, HAMMOUTI&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Streaming-Stereoscopie| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Streaming en stéréoscopie | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/zhao-zilong/streaming_stereo &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:bruel_medewou_ndiaye.pdf|Rapport_consultant]] - [[Media:streaming.pdf|mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[PersyCup2016]]&lt;br /&gt;
 | BIN, ZEGAOUI, ELLAPIN &lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[PersyCup| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/legominstorm/lego &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SoutenanceMiParcours-Persycup2016.pdf|Soutenance Mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Services étendus pour le modèle de composants iPOPO pour Python]]&lt;br /&gt;
 | FOUNAS, HALLAL, GATTAZ &lt;br /&gt;
 | Calmant &amp;amp; Donsez&lt;br /&gt;
 | [[Proj-2015-2016-Extensions_IPOPO | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/abdelazizFounas/ipopo/tree/tlsremote &#039;&#039;&#039;github IPOPO&#039;&#039;&#039;] &amp;lt;br /&amp;gt; [https://github.com/gattazr/IPOPO-Remote-Client &#039;&#039;&#039;github IPOPO Client&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:9_RapportProjet.pdf|Rapport]] - [[Media:9_TransparentsProojet.pdf|Transparents]] - [[Media:9_FlyerProjet.pdf|Flyer]] - [[Media:3-SRS-Pres.pdf| Rapport Consultant]] - [[Media:9_PatternStrat.pdf|Pattern Design]] - [[Media:9_Mid-Presentation.pdf|Mid Presentation]] - [[Media:9_Gantt.pdf|Gantt]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[IndoorGeoloc2016]]&lt;br /&gt;
 | ARRADA - CRASTES - FAURE - STOIAN					&lt;br /&gt;
 | Donsez&lt;br /&gt;
 | [[Proj-2015-2016-IndoorGeoloc/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-IndoorGeoloc/SRS|SRS]]&lt;br /&gt;
 | [https://github.com/QuentinFA/Geoloc_Indoor &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Proj-2015-2016-IndoorGeoloc/RapportProjet.pdf|Rapport]] - [[Media:Proj-2015-2016-IndoorGeoloc/TransparentsProjet.pdf|Transparents]] - [[Media:Proj-2015-2016-IndoorGeoloc/FlyerProjet.pdf|Flyer]] - [[Media: SRSGroupe17.pdf| Rapport Consultant]] - [[Media:Mi_parcours.pdf|Mid presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[UPnPOpenHAB2016]]&lt;br /&gt;
 | Medewou , Ndiyae Yacine , Bruel Anna &lt;br /&gt;
 | Didier Donsez &amp;amp; Jérome Maisonnasse&lt;br /&gt;
 | [[Proj-Openhab-2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Int%C3%A9gration_de_cam%C3%A9ra_de_surveillance_UPnP_%C3%A0_Openhab/SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-Openhab/UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/openHab-UPnP &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_ZHAO_HAMMOUTI.pdf|Rapport Consultant]] - [[Media:pattern_ZHAO_HAMMOUTI.pdf|Patterns]] - [[Media:fichier.pdf|Mini soutenance]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[Sign2Speech]]&lt;br /&gt;
 | NIOGRET, NOGUERON, TITH&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[sign2speech_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Sign2Speech | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/SignToSpeech-Project &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:12-Sign2Speech-RapportConsultant.pdf|Rapport Consultant]] - [[Media:12-Sign2Speech-MidPres.pdf|Mid presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[AstroImage]] &lt;br /&gt;
 | RACHEX, BLANC, GERRY&lt;br /&gt;
 | Olivier Richard et Bruno Bzeznik&lt;br /&gt;
 | [[Proj-2015-2016-Astroimage/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[AstroImage/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Media:AstroImage-UML.pdf | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/nicolas-blanc/AstroImage &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:13-AstroImage-RapportConsultant.pdf|Rapport Consultant]] - [https://docs.google.com/presentation/d/15F8DRktwmOuSNabdxMASniyr-TIiRzGNNG1mOhcoSnk/edit?usp=sharing &#039;&#039;&#039;Patterns&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[Tachymètre]]&lt;br /&gt;
 | MACE, NOUGUIER, RAMEL&lt;br /&gt;
 | Olivier Gattaz&lt;br /&gt;
 | [[Fiche - Tachymètre | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Tachymètre| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - Tachymètre| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Quego/Tachymetre &#039;&#039;&#039;github - Tachymètre&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:srs_tachymetre.pdf|Rapport consultant]] - [[Media:14_PatternDesign.pdf‎ | Pattern Design]] - [[Media:Tachymetre_Presentation.pdf‎ | Présentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[SmartProjector]]&lt;br /&gt;
 | BRANGER, HABLOT&lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[Fiche_SmartProjector_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - SmartProjector| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - SmartProjector| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/P0ppoff/SmartProjector &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Rapport]] - [[Media:PresentationPorjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:Gl_groupe16.pdf|Rapport Consultant]] - [http://air.imag.fr/index.php/Patron_de_conception_-_SmartProjector patterns]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Liste de projets===&lt;br /&gt;
&lt;br /&gt;
* [[Dashboard pour gestionnaire de tâches et de ressources]], Olivier Richard&lt;br /&gt;
* [[Moteur distribué d&#039;exécution de commande]], Olivier Richard&lt;br /&gt;
* [[Environnement d&#039;expérimentation de pour NVIDIA Shield (Tegra X1)]], Olivier Richard   &lt;br /&gt;
* [[Speeding Simplified Script Language]], Olivier Richard&lt;br /&gt;
&lt;br /&gt;
* Aide (Open-Source)au Handicap Auditif, avec Didier Donsez, Jérome Maisonnasse, Marie-Paule Balicco (SAH UGA) et Nicolas Vuillerme&lt;br /&gt;
** [[Borne interactive]] (1 sujet)&lt;br /&gt;
** [[Sonotone]] (1 sujet)&lt;br /&gt;
** [[Sous-titre en temps réel d&#039;un cours]] (1 sujet)&lt;br /&gt;
* [[GrenobloisFuté]] Couche trafic sur OsmAnd avec un greffon. Données dynamique de la métro. Dvp Android. Nicolas Palix.&lt;br /&gt;
* [[GeoDiff]] Production, visualisation, fusion de variations (diff) sur de l&#039;information géocodée : Nicolas Palix&lt;br /&gt;
* [[Smart campus augmenté et contributif]] Didier Donsez, Vivien Quema&lt;br /&gt;
&lt;br /&gt;
* [[Streaming en stéréoscopie]] sur [[WebRTC]] avec rendu sur [[Oculus]] pour le robot [[RobAIR]], Jérôme Maisonnasse. ([http://gstconf.ubicast.tv/videos/stereoscopic-3d-video/ voir]).&lt;br /&gt;
* [[STM32F7]] : Mise en oeuvre de la chaîne de compilation sous Linux avec [[OpenSTM32]] et [[OpenOCD]]. Nicolas Palix&lt;br /&gt;
* [[PersyCup2016]] : Persyval Robocup, Didier Donsez, Vivien Quema, Jérome Maisonnasse. (3 étudiants)&lt;br /&gt;
* [[Services étendus pour le modèle de composants iPOPO pour Python]], Didier Donsez &amp;amp; Thomas Calmant. (2 étudiants)&lt;br /&gt;
* [[SmartClassRoom2016|Développement d&#039;une interface partagée pour tables tactiles (projet SmartClassRoom)]], Didier Donsez, Jérôme Maisonnasse. (2 étudiants)&lt;br /&gt;
* [[iRock2016|iRock : surveillance de glissement de terrains]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[IndoorGeoloc2016|Géolocalisation in-door au moyen de balises (beacon) BLE et Wifi à base de STM32 et de balises iBeacon &amp;amp; AltBeacon]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[UPnPOpenHAB2016|Intégration et gestion de caméras de surveillance UPnP dans la plateforme domotique open-source OpenHAB et myOpenHAB]], Didier Donsez &amp;amp; Jérome Maisonnasse.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projets non prioritaires&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Liveprogramming with Kivy]], Olivier Richard&lt;br /&gt;
* [[AstroImage]] production d&#039;image d&#039;astronomie, Olivier Richard et Bruno Bzeznik&lt;br /&gt;
* [[G-code Cruncher]] Controle de machine CNC (Nucleo grbl + esp8266 + Sdcard), Olivier Richard&lt;br /&gt;
* [[Intégration OpenHAB / OpenTele]] Nicolas Palix&lt;br /&gt;
&lt;br /&gt;
==RICM5==&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignant responsable : Didier Donsez&lt;br /&gt;
&lt;br /&gt;
Démarrage : Lundi 25/01 à 10H30-12H30, P253 (Rendez-vous devant la salle AIR) - Visioconf pour Thibaut Cordier&lt;br /&gt;
&lt;br /&gt;
Soutenance : Jeudi 17/03 à 13H00-17H00, salle P043 (Polytech Grenoble)puis en salle C005 (Batiment C) &lt;br /&gt;
&lt;br /&gt;
Etudiants : RICM5 + 8 étudiants Avosti DUT RT&lt;br /&gt;
&lt;br /&gt;
Rappel séances MPI&lt;br /&gt;
* Séance 1 : mardi 26 janvier après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 2 : mardi 2 février après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 3 : lundi 8 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 4 : jeudi 11 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 5 : lundi 21 mars matin - Stéphanie Diligent et Emmanuelle Tréhoust&lt;br /&gt;
&lt;br /&gt;
=====Soutenances=====&lt;br /&gt;
Planning:&lt;br /&gt;
* Bossa (13H00-13H40 en salle P043)&lt;br /&gt;
* Immersion EDF (13H45-14H25 en salle P043)&lt;br /&gt;
* IaaS Docker (14H30-15H10 en salle P043)&lt;br /&gt;
* SmartCampus (15H15-15H55 en salle P043 et salle P259 AIR)&lt;br /&gt;
* SmartClassRoom (16H15-16H55 en C005)&lt;br /&gt;
* Pot d&#039; &amp;quot;Au Revoir&amp;quot; (17H00-1800 en C005)&lt;br /&gt;
&lt;br /&gt;
Instructions:&lt;br /&gt;
*Chaque soutenance comporte 15 minutes de présentation, 15 minutes de démonstration et 10 minutes de questions. Un transparent doit être consacré au travail confié et réalisé par les étudiants en DUT (AVOSTI).&lt;br /&gt;
* Répétez plusieurs fois votre présentation et votre démonstration.&lt;br /&gt;
* L&#039;ensemble des documents (y compris photos, vidéos et &#039;&#039;[[Logiciels#Screencast|screencast]]s&#039;&#039;) doivent être accessibles depuis le tableau ci-dessous et dans chaque fiche de suivi. Prévoyez une copie sur clé USB.&lt;br /&gt;
* Les étudiants vous accompagnent lors de votre soutenance.&lt;br /&gt;
* &#039;&#039;&#039;TOUT Le matériel prêté devra être rapporté et restitué dans un sac cabas lors de la soutenance.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====Projets=====&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM5 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Documents&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [http://air.imag.fr/index.php/IaaS_collaboratif_avec_Docker IaaS - Docker]&lt;br /&gt;
 | Eudes Robin, Damotte Alan, Barthelemy Romain, Mammar Malek, Guo Kai&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-IaaS_Docker| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-IaaS_Docker-SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/EudesRobin/iaas-collaboratif  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportMPI_Iaas.pdf|Rapport]] - [[Media:Transparents_IaaS.pdf|Transparents]] - [[Media:Flyer_IaaS.pdf|Flyer]] - [https://youtu.be/qtqgZNrgcRc  &#039;&#039;&#039;Screencast&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [http://air.imag.fr/index.php/Portage_de_Bossa Portage de Bossa sur le Kernel Linux 4x]&lt;br /&gt;
 | Eric Michel Fotsing, Ombeline Rossi, Longfei Yao&lt;br /&gt;
 | Nicolas Palix, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-Portage_Bossa| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-Portage_Bossa-SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/ZenithKaizer/  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Rapport_Bossa.pdf|Rapport]] - [[Media:Transparents_Bossa.pdf|Transparents]] - [[Media:Flyer_Bossa.pdf|Flyer]] - Photos - Vidéos &lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Visite immersive en réalité virtuelle dans une usine avec EDF]]&lt;br /&gt;
 | Adam Christophe, Aissanou Sarah, Klipffel Tararaina, Qian Jean, Zominy Laurent&lt;br /&gt;
 | Didier Donsez, Georges-Pierre Bonneau, Thibaut Cordier (EDF)&lt;br /&gt;
 | [[Projets-2015-2016-VisiteImmersiveEDF| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/VisiteImmersiveEDF  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetX.pdf|Rapport]] - [[Media:TransparentsProojetX.pdf|Transparents]] - [[Media:FlyerProjetX.pdf|Flyer]] - Photos - Vidéos&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Contribution à OpenSmartCampus]] (voir http://data.beta.metropolegrenoble.fr/)&lt;br /&gt;
 | Quentin Torck, Vivien Michel, Jérémy Hammerer, Rama Codazzi, Zhengmeng Zhang&lt;br /&gt;
 | Didier Donsez, Vivien Quéma&lt;br /&gt;
 | [[Projets-2015-2016-OpenSmartCampus| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/quentin74/SmartCampus.git  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetOpenSmartCampus2016.pdf|Rapport]] - [[Media:TransparentsProojetOpenSmartCampus2016.pdf|Transparents]] - [[Media:FlyerProjetOpenSmartCampus2016.pdf|Flyer]]  - Photos - Vidéos&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Contribution à SmartClassRoom]] (Interfaces tactiles distribuées et partagées)&lt;br /&gt;
 | Saussac Thibault, Toussaint Sébastien, Hamdani Youcef, Zoppello Sebastien, Melik sak, Mesnier Vincent&lt;br /&gt;
 | Jérôme Maisonnasse, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-SmartClassRoom| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-SmartClassRoom/SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/XXXX  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetSmartClassRoom.pdf|Rapport]] - [[Media:TransparentsProjetSmartClassRoom.pdf|Transparents]] - [[Media:FlyerProjetSmartClassRoom.pdf|Flyer]]   - Photos - [https://youtu.be/FEwoA4S9rsM  &#039;&#039;&#039;Screencast/Vidéo&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Projets annulés et reportés===&lt;br /&gt;
* Projet avec [[Tango Project]] (Annulé)&lt;br /&gt;
* Hack the Beam, Didier Donsez &amp;amp; Jérôme Maisonnasse.&lt;br /&gt;
* [[Algorithmes de suivi de personnes pour robot de téléprésence RobAIR]] (Jérôme Maisonnasse, Didier Donsez)&lt;br /&gt;
&lt;br /&gt;
=M2PGI=&lt;br /&gt;
==[[Projets M2PGI Services Machine-to-Machine|Projet Services Machine-to-Machine]]==&lt;br /&gt;
* [[PM2M/2016/TP|Sujet et groupes]]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27981</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27981"/>
		<updated>2016-03-16T10:13:30Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* How to use the scripts? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - March 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: March 7th  - March 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: March 14th  - March 17th ===&lt;br /&gt;
* Finish presentation preparation&lt;br /&gt;
* Fix some bugs:&lt;br /&gt;
** Start instances if they already exist&lt;br /&gt;
** Stop instances and no longer remove them in order to be reused/started again&lt;br /&gt;
** Really remove client instances running on provider when he choose to not be available&lt;br /&gt;
** Others minor fixes&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
== Database schema ==&lt;br /&gt;
&lt;br /&gt;
[[File:Database.jpg|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use too much space disk of the provider. To do so, we implemented a watchdog that checks every 30 seconds the disk usage of each container and stops them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper and to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
== Archive content ==&lt;br /&gt;
&lt;br /&gt;
*Scripts:&lt;br /&gt;
** coordinatorBuild: used to build coordinator and shinken images&lt;br /&gt;
** coordinatorStart: used to start coordinator and shinken images&lt;br /&gt;
** coordinatorStop: used to stop coordinator and shinken images&lt;br /&gt;
** userAdd: add iaas user to host&lt;br /&gt;
** startProvider: main script that create iaas user, build all images, and start coordinator and monitoring containers&lt;br /&gt;
&lt;br /&gt;
*Folders:&lt;br /&gt;
** containerManagment: contains all the scripts which are copied to iaas user home and will be used to manage containers&lt;br /&gt;
** coordinator: contains Dockerfile and script to initialize coordinator image&lt;br /&gt;
** docker_shinken: contains Dockerfiles and scripts to initialize monitoring image (note: we now use cAdvisor to monitor our containers)&lt;br /&gt;
** images: contains Dockerfiles and scripts to initialize main images (ubuntu, debian, centos)&lt;br /&gt;
&lt;br /&gt;
== How to use the scripts? ==&lt;br /&gt;
&lt;br /&gt;
* To initialize and start coordinator and monitoring containers:&lt;br /&gt;
 ./startProvider.sh&lt;br /&gt;
&lt;br /&gt;
* To start coordinator and monitoring containers (will have no effect if they are already started, not necessary if startProvider script is used):&lt;br /&gt;
 ./coordinatorStart.sh&lt;br /&gt;
&lt;br /&gt;
* To stop coordinator and monitoring containers:&lt;br /&gt;
 ./coordinatorStop.sh&lt;br /&gt;
&lt;br /&gt;
* If you need to update coordinator or shinken image:&lt;br /&gt;
&lt;br /&gt;
:* Update coordinator image&lt;br /&gt;
 ./coordinatorBuild.sh update coordinator&lt;br /&gt;
&lt;br /&gt;
:* Update shinken image (this is not necessary anymore since we use cAdvisor)&lt;br /&gt;
 ./coordinatorBuild.sh update shinken&lt;br /&gt;
&lt;br /&gt;
:* Update both coordinator and shinken image&lt;br /&gt;
 ./coordinatorBuild.sh update all&lt;br /&gt;
&lt;br /&gt;
There is no need to use the other scripts the archive contains.&lt;br /&gt;
&lt;br /&gt;
= Monitoring with cAdvisor=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We were looking for a light and efficient tool to monitor the instances running on provider side. We first used Shinken but we found this tool way to heavy for what we wanted to do. Then we found cAdvisor.&lt;br /&gt;
&lt;br /&gt;
Google first created cAdvisor to monitor their own lmctfy containers and added Docker container support (those that use the default lib container execdriver). cAdvisor is short for Container Advisor. You can use cAdvisor to get a detailed look into the resource usage and the various performance characteristics of your running containers. cAdvisor includes a simple UI to view the live data, a simple API to retrieve the data programmatically, and the ability to store the data in an external InfluxDB.&lt;br /&gt;
&lt;br /&gt;
If you want to monitor all of the containers you have running on a host, you can deploy the cAdvisor image as a container in that same host. It will then have access to the resource usage and performance characteristics of your other containers in that host.&lt;br /&gt;
&lt;br /&gt;
You can check cAdvisor is running by pointing your browser to the host’s IP or hostname and port 8080. If running locally, try http://localhost:8080. This will bring up the built-in Web UI.&lt;br /&gt;
&lt;br /&gt;
[[File:cAdvisor.png|center|thumb|500px|cAdvisor]]&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27980</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27980"/>
		<updated>2016-03-16T10:13:09Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* How to use the scripts? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - March 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: March 7th  - March 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: March 14th  - March 17th ===&lt;br /&gt;
* Finish presentation preparation&lt;br /&gt;
* Fix some bugs:&lt;br /&gt;
** Start instances if they already exist&lt;br /&gt;
** Stop instances and no longer remove them in order to be reused/started again&lt;br /&gt;
** Really remove client instances running on provider when he choose to not be available&lt;br /&gt;
** Others minor fixes&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
== Database schema ==&lt;br /&gt;
&lt;br /&gt;
[[File:Database.jpg|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use too much space disk of the provider. To do so, we implemented a watchdog that checks every 30 seconds the disk usage of each container and stops them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper and to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
== Archive content ==&lt;br /&gt;
&lt;br /&gt;
*Scripts:&lt;br /&gt;
** coordinatorBuild: used to build coordinator and shinken images&lt;br /&gt;
** coordinatorStart: used to start coordinator and shinken images&lt;br /&gt;
** coordinatorStop: used to stop coordinator and shinken images&lt;br /&gt;
** userAdd: add iaas user to host&lt;br /&gt;
** startProvider: main script that create iaas user, build all images, and start coordinator and monitoring containers&lt;br /&gt;
&lt;br /&gt;
*Folders:&lt;br /&gt;
** containerManagment: contains all the scripts which are copied to iaas user home and will be used to manage containers&lt;br /&gt;
** coordinator: contains Dockerfile and script to initialize coordinator image&lt;br /&gt;
** docker_shinken: contains Dockerfiles and scripts to initialize monitoring image (note: we now use cAdvisor to monitor our containers)&lt;br /&gt;
** images: contains Dockerfiles and scripts to initialize main images (ubuntu, debian, centos)&lt;br /&gt;
&lt;br /&gt;
== How to use the scripts? ==&lt;br /&gt;
&lt;br /&gt;
* To initialize and start coordinator and monitoring containers:&lt;br /&gt;
 ./startProvider.sh&lt;br /&gt;
&lt;br /&gt;
* To start coordinator and monitoring containers (will have no effect if they are already started, not necessary if startProvider script is used):&lt;br /&gt;
 ./coordinatorStart.sh&lt;br /&gt;
&lt;br /&gt;
* To stop coordinator and monitoring containers:&lt;br /&gt;
 ./coordinatorStop.sh&lt;br /&gt;
&lt;br /&gt;
* If you need to update coordinator or shinken image:&lt;br /&gt;
&lt;br /&gt;
** Update coordinator image&lt;br /&gt;
 ./coordinatorBuild.sh update coordinator&lt;br /&gt;
&lt;br /&gt;
** Update shinken image (this is not necessary anymore since we use cAdvisor)&lt;br /&gt;
 ./coordinatorBuild.sh update shinken&lt;br /&gt;
&lt;br /&gt;
** Update both coordinator and shinken image&lt;br /&gt;
 ./coordinatorBuild.sh update all&lt;br /&gt;
&lt;br /&gt;
There is no need to use the other scripts the archive contains.&lt;br /&gt;
&lt;br /&gt;
= Monitoring with cAdvisor=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We were looking for a light and efficient tool to monitor the instances running on provider side. We first used Shinken but we found this tool way to heavy for what we wanted to do. Then we found cAdvisor.&lt;br /&gt;
&lt;br /&gt;
Google first created cAdvisor to monitor their own lmctfy containers and added Docker container support (those that use the default lib container execdriver). cAdvisor is short for Container Advisor. You can use cAdvisor to get a detailed look into the resource usage and the various performance characteristics of your running containers. cAdvisor includes a simple UI to view the live data, a simple API to retrieve the data programmatically, and the ability to store the data in an external InfluxDB.&lt;br /&gt;
&lt;br /&gt;
If you want to monitor all of the containers you have running on a host, you can deploy the cAdvisor image as a container in that same host. It will then have access to the resource usage and performance characteristics of your other containers in that host.&lt;br /&gt;
&lt;br /&gt;
You can check cAdvisor is running by pointing your browser to the host’s IP or hostname and port 8080. If running locally, try http://localhost:8080. This will bring up the built-in Web UI.&lt;br /&gt;
&lt;br /&gt;
[[File:cAdvisor.png|center|thumb|500px|cAdvisor]]&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27979</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27979"/>
		<updated>2016-03-16T10:12:49Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* How to use the scripts? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - March 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: March 7th  - March 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: March 14th  - March 17th ===&lt;br /&gt;
* Finish presentation preparation&lt;br /&gt;
* Fix some bugs:&lt;br /&gt;
** Start instances if they already exist&lt;br /&gt;
** Stop instances and no longer remove them in order to be reused/started again&lt;br /&gt;
** Really remove client instances running on provider when he choose to not be available&lt;br /&gt;
** Others minor fixes&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
== Database schema ==&lt;br /&gt;
&lt;br /&gt;
[[File:Database.jpg|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use too much space disk of the provider. To do so, we implemented a watchdog that checks every 30 seconds the disk usage of each container and stops them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper and to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
== Archive content ==&lt;br /&gt;
&lt;br /&gt;
*Scripts:&lt;br /&gt;
** coordinatorBuild: used to build coordinator and shinken images&lt;br /&gt;
** coordinatorStart: used to start coordinator and shinken images&lt;br /&gt;
** coordinatorStop: used to stop coordinator and shinken images&lt;br /&gt;
** userAdd: add iaas user to host&lt;br /&gt;
** startProvider: main script that create iaas user, build all images, and start coordinator and monitoring containers&lt;br /&gt;
&lt;br /&gt;
*Folders:&lt;br /&gt;
** containerManagment: contains all the scripts which are copied to iaas user home and will be used to manage containers&lt;br /&gt;
** coordinator: contains Dockerfile and script to initialize coordinator image&lt;br /&gt;
** docker_shinken: contains Dockerfiles and scripts to initialize monitoring image (note: we now use cAdvisor to monitor our containers)&lt;br /&gt;
** images: contains Dockerfiles and scripts to initialize main images (ubuntu, debian, centos)&lt;br /&gt;
&lt;br /&gt;
== How to use the scripts? ==&lt;br /&gt;
&lt;br /&gt;
* To initialize and start coordinator and monitoring containers:&lt;br /&gt;
 ./startProvider.sh&lt;br /&gt;
&lt;br /&gt;
* To start coordinator and monitoring containers (will have no effect if they are already started, not necessary if startProvider script is used):&lt;br /&gt;
 ./coordinatorStart.sh&lt;br /&gt;
&lt;br /&gt;
* To stop coordinator and monitoring containers:&lt;br /&gt;
 ./coordinatorStop.sh&lt;br /&gt;
&lt;br /&gt;
* If you need to update coordinator or shinken image:&lt;br /&gt;
&lt;br /&gt;
 *Update coordinator image&lt;br /&gt;
 ./coordinatorBuild.sh update coordinator&lt;br /&gt;
&lt;br /&gt;
 *Update shinken image (this is not necessary anymore since we use cAdvisor)&lt;br /&gt;
 ./coordinatorBuild.sh update shinken&lt;br /&gt;
&lt;br /&gt;
 *Update both coordinator and shinken image&lt;br /&gt;
 ./coordinatorBuild.sh update all&lt;br /&gt;
&lt;br /&gt;
There is no need to use the other scripts the archive contains.&lt;br /&gt;
&lt;br /&gt;
= Monitoring with cAdvisor=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We were looking for a light and efficient tool to monitor the instances running on provider side. We first used Shinken but we found this tool way to heavy for what we wanted to do. Then we found cAdvisor.&lt;br /&gt;
&lt;br /&gt;
Google first created cAdvisor to monitor their own lmctfy containers and added Docker container support (those that use the default lib container execdriver). cAdvisor is short for Container Advisor. You can use cAdvisor to get a detailed look into the resource usage and the various performance characteristics of your running containers. cAdvisor includes a simple UI to view the live data, a simple API to retrieve the data programmatically, and the ability to store the data in an external InfluxDB.&lt;br /&gt;
&lt;br /&gt;
If you want to monitor all of the containers you have running on a host, you can deploy the cAdvisor image as a container in that same host. It will then have access to the resource usage and performance characteristics of your other containers in that host.&lt;br /&gt;
&lt;br /&gt;
You can check cAdvisor is running by pointing your browser to the host’s IP or hostname and port 8080. If running locally, try http://localhost:8080. This will bring up the built-in Web UI.&lt;br /&gt;
&lt;br /&gt;
[[File:cAdvisor.png|center|thumb|500px|cAdvisor]]&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27978</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27978"/>
		<updated>2016-03-16T10:11:23Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Containers&amp;#039; automatic deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - March 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: March 7th  - March 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: March 14th  - March 17th ===&lt;br /&gt;
* Finish presentation preparation&lt;br /&gt;
* Fix some bugs:&lt;br /&gt;
** Start instances if they already exist&lt;br /&gt;
** Stop instances and no longer remove them in order to be reused/started again&lt;br /&gt;
** Really remove client instances running on provider when he choose to not be available&lt;br /&gt;
** Others minor fixes&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
== Database schema ==&lt;br /&gt;
&lt;br /&gt;
[[File:Database.jpg|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use too much space disk of the provider. To do so, we implemented a watchdog that checks every 30 seconds the disk usage of each container and stops them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper and to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
== Archive content ==&lt;br /&gt;
&lt;br /&gt;
*Scripts:&lt;br /&gt;
** coordinatorBuild: used to build coordinator and shinken images&lt;br /&gt;
** coordinatorStart: used to start coordinator and shinken images&lt;br /&gt;
** coordinatorStop: used to stop coordinator and shinken images&lt;br /&gt;
** userAdd: add iaas user to host&lt;br /&gt;
** startProvider: main script that create iaas user, build all images, and start coordinator and monitoring containers&lt;br /&gt;
&lt;br /&gt;
*Folders:&lt;br /&gt;
** containerManagment: contains all the scripts which are copied to iaas user home and will be used to manage containers&lt;br /&gt;
** coordinator: contains Dockerfile and script to initialize coordinator image&lt;br /&gt;
** docker_shinken: contains Dockerfiles and scripts to initialize monitoring image (note: we now use cAdvisor to monitor our containers)&lt;br /&gt;
** images: contains Dockerfiles and scripts to initialize main images (ubuntu, debian, centos)&lt;br /&gt;
&lt;br /&gt;
== How to use the scripts? ==&lt;br /&gt;
&lt;br /&gt;
* To initialize and start coordinator and monitoring containers:&lt;br /&gt;
 ./startProvider.sh&lt;br /&gt;
&lt;br /&gt;
* To start coordinator and monitoring containers (will have no effect if they are already started, not necessary if startProvider script is used):&lt;br /&gt;
 ./coordinatorStart.sh&lt;br /&gt;
&lt;br /&gt;
* To stop coordinator and monitoring containers:&lt;br /&gt;
 ./coordinatorStop.sh&lt;br /&gt;
&lt;br /&gt;
* If you need to update coordinator or shinken image:&lt;br /&gt;
&lt;br /&gt;
** Update coordinator image&lt;br /&gt;
 ./coordinatorBuild.sh update coordinator&lt;br /&gt;
&lt;br /&gt;
** Update shinken image (this is not necessary anymore since we use cAdvisor)&lt;br /&gt;
 ./coordinatorBuild.sh update shinken&lt;br /&gt;
&lt;br /&gt;
**Update both coordinator and shinken image&lt;br /&gt;
 ./coordinatorBuild.sh update all&lt;br /&gt;
&lt;br /&gt;
There is no need to use the other scripts the archive contains.&lt;br /&gt;
&lt;br /&gt;
= Monitoring with cAdvisor=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We were looking for a light and efficient tool to monitor the instances running on provider side. We first used Shinken but we found this tool way to heavy for what we wanted to do. Then we found cAdvisor.&lt;br /&gt;
&lt;br /&gt;
Google first created cAdvisor to monitor their own lmctfy containers and added Docker container support (those that use the default lib container execdriver). cAdvisor is short for Container Advisor. You can use cAdvisor to get a detailed look into the resource usage and the various performance characteristics of your running containers. cAdvisor includes a simple UI to view the live data, a simple API to retrieve the data programmatically, and the ability to store the data in an external InfluxDB.&lt;br /&gt;
&lt;br /&gt;
If you want to monitor all of the containers you have running on a host, you can deploy the cAdvisor image as a container in that same host. It will then have access to the resource usage and performance characteristics of your other containers in that host.&lt;br /&gt;
&lt;br /&gt;
You can check cAdvisor is running by pointing your browser to the host’s IP or hostname and port 8080. If running locally, try http://localhost:8080. This will bring up the built-in Web UI.&lt;br /&gt;
&lt;br /&gt;
[[File:cAdvisor.png|center|thumb|500px|cAdvisor]]&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:CAdvisor.png&amp;diff=27973</id>
		<title>File:CAdvisor.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:CAdvisor.png&amp;diff=27973"/>
		<updated>2016-03-16T09:49:35Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27972</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27972"/>
		<updated>2016-03-16T09:49:18Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Containers&amp;#039; automatic deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - March 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: March 7th  - March 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: March 14th  - March 17th ===&lt;br /&gt;
* Finish presentation preparation&lt;br /&gt;
* Fix some bugs:&lt;br /&gt;
** Start instances if they already exist&lt;br /&gt;
** Stop instances and no longer remove them in order to be reused/started again&lt;br /&gt;
** Really remove client instances running on provider when he choose to not be available&lt;br /&gt;
** Others minor fixes&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
== Database schema ==&lt;br /&gt;
&lt;br /&gt;
[[File:Database.jpg|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use too much space disk of the provider. To do so, we implemented a watchdog that checks every 30 seconds the disk usage of each container and stops them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper and to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Monitoring with cAdvisor=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We were looking for a light and efficient tool to monitor the instances running on provider side. We first used Shinken but we found this tool way to heavy for what we wanted to do. Then we found cAdvisor.&lt;br /&gt;
&lt;br /&gt;
Google first created cAdvisor to monitor their own lmctfy containers and added Docker container support (those that use the default lib container execdriver). cAdvisor is short for Container Advisor. You can use cAdvisor to get a detailed look into the resource usage and the various performance characteristics of your running containers. cAdvisor includes a simple UI to view the live data, a simple API to retrieve the data programmatically, and the ability to store the data in an external InfluxDB.&lt;br /&gt;
&lt;br /&gt;
If you want to monitor all of the containers you have running on a host, you can deploy the cAdvisor image as a container in that same host. It will then have access to the resource usage and performance characteristics of your other containers in that host.&lt;br /&gt;
&lt;br /&gt;
You can check cAdvisor is running by pointing your browser to the host’s IP or hostname and port 8080. If running locally, try http://localhost:8080. This will bring up the built-in Web UI.&lt;br /&gt;
&lt;br /&gt;
[[File:cAdvisor.png|center|thumb|500px|cAdvisor]]&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27914</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27914"/>
		<updated>2016-03-15T08:45:52Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - March 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: March 7th  - March 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: March 14th  - March 17th ===&lt;br /&gt;
* Finish presentation preparation&lt;br /&gt;
* Fix some bugs:&lt;br /&gt;
** Start instances if they already exist&lt;br /&gt;
** Stop instances and no longer remove them in order to be reused/started again&lt;br /&gt;
** Really remove client instances running on provider when he choose to not be available&lt;br /&gt;
** Others minor fixes&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
== Database schema ==&lt;br /&gt;
&lt;br /&gt;
[[File:Database.jpg|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use too much space disk of the provider. To do so, we implemented a watchdog that checks every 30 seconds the disk usage of each container and stops them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper and to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=27891</id>
		<title>Projets 2015-2016</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=27891"/>
		<updated>2016-03-14T14:01:39Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Projets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2014-2015]] | [[Projets]] | [[Projets 2016-2017]]&amp;gt;&amp;gt;&lt;br /&gt;
=RICM=&lt;br /&gt;
==RICM3==&lt;br /&gt;
&lt;br /&gt;
==RICM4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi 7 mars&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: vous creusez la question, vous contactez l&#039;auteur du code si il y a lieux, vous faites un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), vous soumettez un patch, vous contactez l&#039;enseignant ou la personne suivant le projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle &lt;br /&gt;
indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par ricm4_2015_2016.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez utiliser un logiciel de gestion de version&#039;&#039;&#039; pour vos développements comme [http://en.wikipedia.org/wiki/Git_%28software%29 git ] et nous vous conseillons d&#039;utiliser le site [https://github.com github] pour l&#039;hébergement de votre dépôt public.&lt;br /&gt;
&lt;br /&gt;
* Les document public (exemple sur github) doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[Dashboard pour gestionnaire de tâches et de ressources]]&lt;br /&gt;
 | CROUZET, MATHIEU&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-DashBoard| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/MatthieuCrouzet/Projet4A &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_groupe1.pdf|Rapport Consultant]] - [[Media:Paterns.pdf|Patterns]] - [[Media:PresentationDashboard.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Speeding Simplified Script Language]]&lt;br /&gt;
 | POPEK, BERTRAND-DALECHAMPS, WEI&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-SSSL| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SSSL-UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/FlorianPO/Speeding-Simplified-Script-Language.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:Groupe2_AIR.pdf|Rapport Consultant]] - [[Media:PresentationProjet.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Borne interactive]] &lt;br /&gt;
 | DUNAND - NAVARRO - REVEL&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Borne-Interactive| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive/UML_Diagrams | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Kant73/InteractiveDisplay &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:IPopo.pdf|Rapport Consultant]] - [[Media:PatternDesign.pdf | &#039;&#039;&#039;Design Pattern&#039;&#039;&#039;]] - [[Media:PresentationInteractiveDisplay.pdf|Présentation Intermédiaire]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Sonotone]]&lt;br /&gt;
 | LECORPS, VOUTAT, Hattinguais	&lt;br /&gt;
 | Maisonnasse, Richard&lt;br /&gt;
 | [[Projets-2015-2016-Sonotone| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]  - [[Projets-2015-2016-Sonotone-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]]  &lt;br /&gt;
 | [https://github.com/Gorgorot38/Sonotone-RICM4 &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SRS_Consultant_Sonotone_4.pdf|Rapport_Consultant]] - [[Media:pattern_sonotone.pdf|Pattern]] - [[Media:Soutenance.pdf|Soutenance_miparcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Sous-titre_en_temps_r%C3%A9el_d%27un_cours| Sous-titre d&#039;un cours en temps réel]]&lt;br /&gt;
 | LECHEVALLIER, BUI, OUNISSI &lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[LiveSubtitles| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lechevallier/RealTimeSubtitles &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media: SRS_Groupe_5.pdf| Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[GrenobloisFuté]]&lt;br /&gt;
 | MOURET, DELAPORTE,  Lucidarme&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[GrenobleFuté| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lucidarme/Osmand.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_G14.pdf|Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Streaming en stéréoscopie]]&lt;br /&gt;
 | ZHAO ZILONG, HAMMOUTI&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Streaming-Stereoscopie| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Streaming en stéréoscopie | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/zhao-zilong/streaming_stereo &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:bruel_medewou_ndiaye.pdf|Rapport_consultant]] - [[Media:streaming.pdf|mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[PersyCup2016]]&lt;br /&gt;
 | BIN, ZEGAOUI, ELLAPIN &lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[PersyCup| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/legominstorm/lego &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SoutenanceMiParcours-Persycup2016.pdf|Soutenance Mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Services étendus pour le modèle de composants iPOPO pour Python]]&lt;br /&gt;
 | FOUNAS, HALLAL, GATTAZ &lt;br /&gt;
 | Calmant &amp;amp; Donsez&lt;br /&gt;
 | [[Proj-2015-2016-Extensions_IPOPO | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/abdelazizFounas/ipopo/tree/tlsremote &#039;&#039;&#039;github IPOPO&#039;&#039;&#039;] &amp;lt;br /&amp;gt; [https://github.com/gattazr/IPOPO-Remote-Client &#039;&#039;&#039;github IPOPO Client&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:9_RapportProjet.pdf|Rapport]] - [[Media:9_TransparentsProojet.pdf|Transparents]] - [[Media:9_FlyerProjet.pdf|Flyer]] - [[Media:3-SRS-Pres.pdf| Rapport Consultant]] - [[Media:9_PatternStrat.pdf|Pattern Design]] - [[Media:9_Mid-Presentation.pdf|Mid Presentation]] - [[Media:9_Gantt.pdf|Gantt]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[IndoorGeoloc2016]]&lt;br /&gt;
 | ARRADA - CRASTES - FAURE - STOIAN					&lt;br /&gt;
 | Donsez&lt;br /&gt;
 | [[Proj-2015-2016-IndoorGeoloc/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-IndoorGeoloc/SRS|SRS]]&lt;br /&gt;
 | [https://github.com/QuentinFA/Geoloc_Indoor &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Proj-2015-2016-IndoorGeoloc/RapportProjet.pdf|Rapport]] - [[Media:Proj-2015-2016-IndoorGeoloc/TransparentsProjet.pdf|Transparents]] - [[Media:Proj-2015-2016-IndoorGeoloc/FlyerProjet.pdf|Flyer]] - [[Media: SRSGroupe17.pdf| Rapport Consultant]] - [[Media:Mi_parcours.pdf|Mid presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[UPnPOpenHAB2016]]&lt;br /&gt;
 | Medewou , Ndiyae Yacine , Bruel Anna &lt;br /&gt;
 | Didier Donsez &amp;amp; Jérome Maisonnasse&lt;br /&gt;
 | [[Proj-Openhab-2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Int%C3%A9gration_de_cam%C3%A9ra_de_surveillance_UPnP_%C3%A0_Openhab/SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-Openhab/UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/openHab-UPnP &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_ZHAO_HAMMOUTI.pdf|Rapport Consultant]] - [[Media:pattern_ZHAO_HAMMOUTI.pdf|Patterns]] - [[Media:fichier.pdf|Mini soutenance]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[Sign2Speech]]&lt;br /&gt;
 | NIOGRET, NOGUERON, TITH&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[sign2speech_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Sign2Speech | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/SignToSpeech-Project &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:12-Sign2Speech-RapportConsultant.pdf|Rapport Consultant]] - [[Media:12-Sign2Speech-MidPres.pdf|Mid presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[AstroImage]] &lt;br /&gt;
 | RACHEX, BLANC, GERRY&lt;br /&gt;
 | Olivier Richard et Bruno Bzeznik&lt;br /&gt;
 | [[Proj-2015-2016-Astroimage/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[AstroImage/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Media:AstroImage-UML.pdf | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/nicolas-blanc/AstroImage &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:13-AstroImage-RapportConsultant.pdf|Rapport Consultant]] - [https://docs.google.com/presentation/d/15F8DRktwmOuSNabdxMASniyr-TIiRzGNNG1mOhcoSnk/edit?usp=sharing &#039;&#039;&#039;Patterns&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[Tachymètre]]&lt;br /&gt;
 | MACE, NOUGUIER, RAMEL&lt;br /&gt;
 | Olivier Gattaz&lt;br /&gt;
 | [[Fiche - Tachymètre | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Tachymètre| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - Tachymètre| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Quego/Tachymetre &#039;&#039;&#039;github - Tachymètre&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:srs_tachymetre.pdf|Rapport consultant]] - [[Media:14_PatternDesign.pdf‎ | Pattern Design]] - [[Media:Tachymetre_Presentation.pdf‎ | Présentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[SmartProjector]]&lt;br /&gt;
 | BRANGER, HABLOT&lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[Fiche_SmartProjector_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - SmartProjector| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - SmartProjector| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/P0ppoff/SmartProjector &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Rapport]] - [[Media:PresentationPorjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:Gl_groupe16.pdf|Rapport Consultant]] - [http://air.imag.fr/index.php/Patron_de_conception_-_SmartProjector patterns]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Liste de projets===&lt;br /&gt;
&lt;br /&gt;
* [[Dashboard pour gestionnaire de tâches et de ressources]], Olivier Richard&lt;br /&gt;
* [[Moteur distribué d&#039;exécution de commande]], Olivier Richard&lt;br /&gt;
* [[Environnement d&#039;expérimentation de pour NVIDIA Shield (Tegra X1)]], Olivier Richard   &lt;br /&gt;
* [[Speeding Simplified Script Language]], Olivier Richard&lt;br /&gt;
&lt;br /&gt;
* Aide (Open-Source)au Handicap Auditif, avec Didier Donsez, Jérome Maisonnasse, Marie-Paule Balicco (SAH UGA) et Nicolas Vuillerme&lt;br /&gt;
** [[Borne interactive]] (1 sujet)&lt;br /&gt;
** [[Sonotone]] (1 sujet)&lt;br /&gt;
** [[Sous-titre en temps réel d&#039;un cours]] (1 sujet)&lt;br /&gt;
* [[GrenobloisFuté]] Couche trafic sur OsmAnd avec un greffon. Données dynamique de la métro. Dvp Android. Nicolas Palix.&lt;br /&gt;
* [[GeoDiff]] Production, visualisation, fusion de variations (diff) sur de l&#039;information géocodée : Nicolas Palix&lt;br /&gt;
* [[Smart campus augmenté et contributif]] Didier Donsez, Vivien Quema&lt;br /&gt;
&lt;br /&gt;
* [[Streaming en stéréoscopie]] sur [[WebRTC]] avec rendu sur [[Oculus]] pour le robot [[RobAIR]], Jérôme Maisonnasse. ([http://gstconf.ubicast.tv/videos/stereoscopic-3d-video/ voir]).&lt;br /&gt;
* [[STM32F7]] : Mise en oeuvre de la chaîne de compilation sous Linux avec [[OpenSTM32]] et [[OpenOCD]]. Nicolas Palix&lt;br /&gt;
* [[PersyCup2016]] : Persyval Robocup, Didier Donsez, Vivien Quema, Jérome Maisonnasse. (3 étudiants)&lt;br /&gt;
* [[Services étendus pour le modèle de composants iPOPO pour Python]], Didier Donsez &amp;amp; Thomas Calmant. (2 étudiants)&lt;br /&gt;
* [[SmartClassRoom2016|Développement d&#039;une interface partagée pour tables tactiles (projet SmartClassRoom)]], Didier Donsez, Jérôme Maisonnasse. (2 étudiants)&lt;br /&gt;
* [[iRock2016|iRock : surveillance de glissement de terrains]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[IndoorGeoloc2016|Géolocalisation in-door au moyen de balises (beacon) BLE et Wifi à base de STM32 et de balises iBeacon &amp;amp; AltBeacon]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[UPnPOpenHAB2016|Intégration et gestion de caméras de surveillance UPnP dans la plateforme domotique open-source OpenHAB et myOpenHAB]], Didier Donsez &amp;amp; Jérome Maisonnasse.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projets non prioritaires&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Liveprogramming with Kivy]], Olivier Richard&lt;br /&gt;
* [[AstroImage]] production d&#039;image d&#039;astronomie, Olivier Richard et Bruno Bzeznik&lt;br /&gt;
* [[G-code Cruncher]] Controle de machine CNC (Nucleo grbl + esp8266 + Sdcard), Olivier Richard&lt;br /&gt;
* [[Intégration OpenHAB / OpenTele]] Nicolas Palix&lt;br /&gt;
&lt;br /&gt;
==RICM5==&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignant responsable : Didier Donsez&lt;br /&gt;
&lt;br /&gt;
Démarrage : Lundi 25/01 à 10H30-12H30, P253 (Rendez-vous devant la salle AIR) - Visioconf pour Thibaut Cordier&lt;br /&gt;
&lt;br /&gt;
Soutenance : Jeudi 17/03 à 13H00-17H00, salle P043 (Polytech Grenoble)puis en salle C005 (Batiment C) &lt;br /&gt;
&lt;br /&gt;
Etudiants : RICM5 + 8 étudiants Avosti DUT RT&lt;br /&gt;
&lt;br /&gt;
Rappel séances MPI&lt;br /&gt;
* Séance 1 : mardi 26 janvier après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 2 : mardi 2 février après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 3 : lundi 8 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 4 : jeudi 11 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 5 : lundi 21 mars matin - Stéphanie Diligent et Emmanuelle Tréhoust&lt;br /&gt;
&lt;br /&gt;
=====Soutenances=====&lt;br /&gt;
Planning:&lt;br /&gt;
* Immersion EDF (13H00-13H40 en salle P043)&lt;br /&gt;
* Bossa (13H45-14H25 en salle P043)&lt;br /&gt;
* IaaS Docker (14H30-15H10 en salle P043)&lt;br /&gt;
* SmartCampus (15H15-15H55 en salle P043 et salle P259 AIR)&lt;br /&gt;
* SmartClassRoom (16H15-16H55 en C005)&lt;br /&gt;
* Pot d&#039; &amp;quot;Au Revoir&amp;quot; (17H00-1800 en C005)&lt;br /&gt;
&lt;br /&gt;
Instructions:&lt;br /&gt;
*Chaque soutenance comporte 15 minutes de présentation, 15 minutes de démonstration et 10 minutes de questions. Un transparent doit être consacré au travail confié et réalisé par les étudiants en DUT (AVOSTI).&lt;br /&gt;
* Répétez plusieurs fois votre présentation et votre démonstration.&lt;br /&gt;
* L&#039;ensemble des documents (y compris photos, vidéos et &#039;&#039;[[Logiciels#Screencast|screencast]]s&#039;&#039;) doivent être accessibles depuis le tableau ci-dessous et dans chaque fiche de suivi. Prévoyez une copie sur clé USB.&lt;br /&gt;
* &#039;&#039;&#039;TOUT Le matériel prêté devra être rapporté et restitué dans un sac cabas lors de la soutenance.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====Projets=====&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM5 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Documents&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [http://air.imag.fr/index.php/IaaS_collaboratif_avec_Docker IaaS - Docker]&lt;br /&gt;
 | Eudes Robin, Damotte Alan, Barthelemy Romain, Mammar Malek, Guo Kai, Bonnard Loïc, Caperan Théo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-IaaS_Docker| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-IaaS_Docker-SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/EudesRobin/iaas-collaboratif  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Rapport_IaaS.pdf|Rapport]] - [[Media:Transparents_IaaS.pdf|Transparents]] - [[Media:Flyer_IaaS.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [http://air.imag.fr/index.php/Portage_de_Bossa Portage de Bossa sur le Kernel Linux 4x]&lt;br /&gt;
 | Eric Michel Fotsing, Ombeline Rossi, Longfei Yao&lt;br /&gt;
 | Nicolas Palix, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-Portage_Bossa| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/ZenithKaizer/  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Rapport_Bossa.pdf|Rapport]] - [[Media:Transparents_Bossa.pdf|Transparents]] - [[Media:Flyer_Bossa.pdf|Flyer]] - Photos - Vidéos&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Visite immersive en réalité virtuelle dans une usine avec EDF]]&lt;br /&gt;
 | Adam Christophe, Aissanou Sarah, Klipffel Tararaina, Qian Jean, Zominy Laurent&lt;br /&gt;
 | Didier Donsez, Georges-Pierre Bonneau, Thibaut Cordier (EDF)&lt;br /&gt;
 | [[Projets-2015-2016-VisiteImmersiveEDF| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/VisiteImmersiveEDF  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetX.pdf|Rapport]] - [[Media:TransparentsProojetX.pdf|Transparents]] - [[Media:FlyerProjetX.pdf|Flyer]] - Photos - Vidéos&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Contribution à OpenSmartCampus]] (voir http://data.beta.metropolegrenoble.fr/)&lt;br /&gt;
 | Quentin Torck, Vivien Michel, Jérémy Hammerer, Rama Codazzi, Zhengmeng Zhang&lt;br /&gt;
 | Didier Donsez, Vivien Quéma&lt;br /&gt;
 | [[Projets-2015-2016-OpenSmartCampus| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/quentin74/SmartCampus.git  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetOpenSmartCampus2016.pdf|Rapport]] - [[Media:TransparentsProojetOpenSmartCampus2016.pdf|Transparents]] - [[Media:FlyerProjetOpenSmartCampus2016.pdf|Flyer]]  - Photos - Vidéos&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Contribution à SmartClassRoom]] (Interfaces tactiles distribuées et partagées)&lt;br /&gt;
 | Saussac Thibault, Toussaint Sébastien, Hamdani Youcef, Zoppello Sebastien, Melik sak, Mesnier Vincent&lt;br /&gt;
 | Jérôme Maisonnasse, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-SmartClassRoom| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/XXXX  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetSmartClassRoom.pdf|Rapport]] - [[Media:TransparentsProjetSmartClassRoom.pdf|Transparents]] - [[Media:FlyerProjetSmartClassRoom.pdf|Flyer]]   - Photos - Vidéos&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Projets annulés et reportés===&lt;br /&gt;
* Projet avec [[Tango Project]] (Annulé)&lt;br /&gt;
* Hack the Beam, Didier Donsez &amp;amp; Jérôme Maisonnasse.&lt;br /&gt;
* [[Algorithmes de suivi de personnes pour robot de téléprésence RobAIR]] (Jérôme Maisonnasse, Didier Donsez)&lt;br /&gt;
&lt;br /&gt;
=M2PGI=&lt;br /&gt;
==[[Projets M2PGI Services Machine-to-Machine|Projet Services Machine-to-Machine]]==&lt;br /&gt;
* [[PM2M/2016/TP|Sujet et groupes]]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27890</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27890"/>
		<updated>2016-03-14T14:00:54Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* System Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
* Finish presentation preparation&lt;br /&gt;
* Fix some bugs:&lt;br /&gt;
** Start instances if they already exist&lt;br /&gt;
** Stop instances and no longer remove them in order to be reused/started again&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
== Database schema ==&lt;br /&gt;
&lt;br /&gt;
[[File:Database.jpg|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use too much space disk of the provider. To do so, we implemented a watchdog that checks every 30 seconds the disk usage of each container and stops them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper and to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27886</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27886"/>
		<updated>2016-03-14T13:43:41Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Week 8: Mars 14th  - Mars 18th */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
* Finish presentation preparation&lt;br /&gt;
* Fix some bugs:&lt;br /&gt;
** Start instances if they already exist&lt;br /&gt;
** Stop instances and no longer remove them in order to be reused/started again&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use too much space disk of the provider. To do so, we implemented a watchdog that checks every 30 seconds the disk usage of each container and stops them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper and to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27876</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27876"/>
		<updated>2016-03-14T09:51:09Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Containers&amp;#039; automatic deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|500px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27875</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27875"/>
		<updated>2016-03-14T09:50:53Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Containers&amp;#039; automatic deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|600px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allows us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes its port 22000 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allows us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set a memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Provider_functioning.png&amp;diff=27874</id>
		<title>File:Provider functioning.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Provider_functioning.png&amp;diff=27874"/>
		<updated>2016-03-14T09:50:20Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: Alan.Damotte uploaded a new version of &amp;amp;quot;File:Provider functioning.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Provider_functioning.png&amp;diff=27872</id>
		<title>File:Provider functioning.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Provider_functioning.png&amp;diff=27872"/>
		<updated>2016-03-14T09:49:10Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: Alan.Damotte uploaded a new version of &amp;amp;quot;File:Provider functioning.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27868</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27868"/>
		<updated>2016-03-14T09:47:14Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Build and run */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task needs to be done from the host. That&#039;s why the first step is to create a new user on provider machine that we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (cAdvisor) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27851</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27851"/>
		<updated>2016-03-14T08:57:47Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Week 7: Mars 7th  - Mars 13th */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decides to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Specification of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which makes it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatizes user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish a connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implement bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployment:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contain only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now its behaviour allows us to have different disk usage for each instance. Now we use a cron job, we won&#039;t need anymore to launch the script by ourselves&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough informations about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually develop some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Test complete loop:&lt;br /&gt;
** Create profile&lt;br /&gt;
** Set required information (ssh public key)&lt;br /&gt;
** As a provider, give settings of the provided machine&lt;br /&gt;
** As a client, ask for an instance&lt;br /&gt;
** As a client connect to the instance (ssh)&lt;br /&gt;
** Check that Rabbitmq is correctly tracing back information about containers/instances &lt;br /&gt;
* Add a rating system which will be used to give a mark to providers.&lt;br /&gt;
* Start preparing the presentation&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Global Architecture ==&lt;br /&gt;
[[File:General_schema_IaaS.png|center|thumb|1000px|Global architecture]]&lt;br /&gt;
&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Provider and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients and their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;br /&gt;
* [https://github.com/meteorhacks/npm meteorhacks:npm Installation Instructions]&lt;br /&gt;
&lt;br /&gt;
== RabbitMQ related ==&lt;br /&gt;
* [https://www.npmjs.com/package/amqplib amqlib , the library used to publish]&lt;br /&gt;
* [https://www.rabbitmq.com/getstarted.html RabbitMQ Tutorials]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27809</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27809"/>
		<updated>2016-03-11T10:22:42Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | February 2016&lt;br /&gt;
 | Romain Barthelemy, Alan Damotte, Robin Eudes, Kai Guo, Malek Mammar&lt;br /&gt;
 | Collaborative IaaS using Docker&lt;br /&gt;
 | Pierre-Yves Gibello&lt;br /&gt;
 | February 2016&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
:** The provider must have Docker installed&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
:* The system must allow user to create their profile&lt;br /&gt;
:* The system must allow client to ask for an instance precising required resources&lt;br /&gt;
:* The system must allow client to launch an instance&lt;br /&gt;
:* The system must allow client to connect to running instance&lt;br /&gt;
:* The system must allow client to stop an instance&lt;br /&gt;
:* The system must allow client to remove an instance&lt;br /&gt;
:* The system should allow client to give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:* The system must allow client to download required files&lt;br /&gt;
:* The system must allow client to launch coordinator system&lt;br /&gt;
:* The system must allow client to provide some of his resources&lt;br /&gt;
:* The system must allow client to start providing&lt;br /&gt;
:* The system must allow client to stop providing&lt;br /&gt;
:* The system should allow client to see resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
[[File:Database_diagram.png|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
The system must deliver correct informations all the time, so that : &lt;br /&gt;
* Clients could only connect to their instances&lt;br /&gt;
* Clients could know status of their instances&lt;br /&gt;
* Providers could know status of their machine&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
The system must be available 24h/24, 7days/7 since both providers and clients should be able to use it.&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
The security of the service must be optimal, clients should not be able to access information on instances of other clients. Furthermore, providers should also not be able to access container&#039;s information.&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
Updates have to be easy to do, in order to add new functionalities, improve the service easily.&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27808</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27808"/>
		<updated>2016-03-11T10:22:06Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | March 2016&lt;br /&gt;
 | Romain Barthelemy, Alan Damotte, Robin Eudes, Kai Guo, Malek Mammar&lt;br /&gt;
 | Collaborative IaaS using Docker&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
:** The provider must have Docker installed&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
:* The system must allow user to create their profile&lt;br /&gt;
:* The system must allow client to ask for an instance precising required resources&lt;br /&gt;
:* The system must allow client to launch an instance&lt;br /&gt;
:* The system must allow client to connect to running instance&lt;br /&gt;
:* The system must allow client to stop an instance&lt;br /&gt;
:* The system must allow client to remove an instance&lt;br /&gt;
:* The system should allow client to give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:* The system must allow client to download required files&lt;br /&gt;
:* The system must allow client to launch coordinator system&lt;br /&gt;
:* The system must allow client to provide some of his resources&lt;br /&gt;
:* The system must allow client to start providing&lt;br /&gt;
:* The system must allow client to stop providing&lt;br /&gt;
:* The system should allow client to see resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
[[File:Database_diagram.png|center|thumb|1000px|Database diagram]]&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
The system must deliver correct informations all the time, so that : &lt;br /&gt;
* Clients could only connect to their instances&lt;br /&gt;
* Clients could know status of their instances&lt;br /&gt;
* Providers could know status of their machine&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
The system must be available 24h/24, 7days/7 since both providers and clients should be able to use it.&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
The security of the service must be optimal, clients should not be able to access information on instances of other clients. Furthermore, providers should also not be able to access container&#039;s information.&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
Updates have to be easy to do, in order to add new functionalities, improve the service easily.&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27788</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27788"/>
		<updated>2016-03-09T15:16:01Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* The team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez&lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decide to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access to containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Speficication of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which make it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatize user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implements bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployement:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contains only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now it&#039;s behaviour allow us to have different disk usage for each instance. Now use a cron job, we won&#039;t need anymore to launch the script by ourself&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough information about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually development some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Start to write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Add a rating system which will be use to give a mark to providers.&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Coordinator and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients et their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27786</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27786"/>
		<updated>2016-03-09T12:57:16Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Reliability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
:** The provider must have Docker installed&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
:* The system must allow user to create their profile&lt;br /&gt;
:* The system must allow client to ask for an instance precising required resources&lt;br /&gt;
:* The system must allow client to launch an instance&lt;br /&gt;
:* The system must allow client to connect to running instance&lt;br /&gt;
:* The system must allow client to stop an instance&lt;br /&gt;
:* The system must allow client to remove an instance&lt;br /&gt;
:* The system should allow client to give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:* The system must allow client to download required files&lt;br /&gt;
:* The system must allow client to launch coordinator system&lt;br /&gt;
:* The system must allow client to provide some of his resources&lt;br /&gt;
:* The system must allow client to start providing&lt;br /&gt;
:* The system must allow client to stop providing&lt;br /&gt;
:* The system should allow client to see resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
The system must deliver correct informations all the time, so that : &lt;br /&gt;
* Clients could only connect to their instances&lt;br /&gt;
* Clients could know status of their instances&lt;br /&gt;
* Providers could know status of their machine&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
The system must be available 24h/24, 7days/7 since both providers and clients should be able to use it.&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
The security of the service must be optimal, clients should not be able to access information on instances of other clients. Furthermore, providers should also not be able to access container&#039;s information.&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
Updates have to be easy to do, in order to add new functionalities, improve the service easily.&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27785</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27785"/>
		<updated>2016-03-09T12:56:35Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Functional requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
:** The provider must have Docker installed&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
:* The system must allow user to create their profile&lt;br /&gt;
:* The system must allow client to ask for an instance precising required resources&lt;br /&gt;
:* The system must allow client to launch an instance&lt;br /&gt;
:* The system must allow client to connect to running instance&lt;br /&gt;
:* The system must allow client to stop an instance&lt;br /&gt;
:* The system must allow client to remove an instance&lt;br /&gt;
:* The system should allow client to give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:* The system must allow client to download required files&lt;br /&gt;
:* The system must allow client to launch coordinator system&lt;br /&gt;
:* The system must allow client to provide some of his resources&lt;br /&gt;
:* The system must allow client to start providing&lt;br /&gt;
:* The system must allow client to stop providing&lt;br /&gt;
:* The system should allow client to see resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
The system must deliver correct informations all the time, so that : &lt;br /&gt;
** Clients could only connect to their instances&lt;br /&gt;
** Clients could know status of their instances&lt;br /&gt;
** Providers could know status of their machine&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
The system must be available 24h/24, 7days/7 since both providers and clients should be able to use it.&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
The security of the service must be optimal, clients should not be able to access information on instances of other clients. Furthermore, providers should also not be able to access container&#039;s information.&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
Updates have to be easy to do, in order to add new functionalities, improve the service easily.&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27784</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27784"/>
		<updated>2016-03-09T12:50:50Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Functional requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
:** The provider must have Docker installed&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
:* The system must allow user to create their profile&lt;br /&gt;
&lt;br /&gt;
:* The sk for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
The system must deliver correct informations all the time, so that : &lt;br /&gt;
** Clients could only connect to their instances&lt;br /&gt;
** Clients could know status of their instances&lt;br /&gt;
** Providers could know status of their machine&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
The system must be available 24h/24, 7days/7 since both providers and clients should be able to use it.&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
The security of the service must be optimal, clients should not be able to access information on instances of other clients. Furthermore, providers should also not be able to access container&#039;s information.&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
Updates have to be easy to do, in order to add new functionalities, improve the service easily.&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27783</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27783"/>
		<updated>2016-03-09T12:49:31Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* General constraints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
:** The provider must have Docker installed&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
:* The system must allow user to create their profile&lt;br /&gt;
:* &lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
The system must deliver correct informations all the time, so that : &lt;br /&gt;
** Clients could only connect to their instances&lt;br /&gt;
** Clients could know status of their instances&lt;br /&gt;
** Providers could know status of their machine&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
The system must be available 24h/24, 7days/7 since both providers and clients should be able to use it.&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
The security of the service must be optimal, clients should not be able to access information on instances of other clients. Furthermore, providers should also not be able to access container&#039;s information.&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
Updates have to be easy to do, in order to add new functionalities, improve the service easily.&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27782</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27782"/>
		<updated>2016-03-09T12:47:10Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Specific requirements, covering functional, non-functional and interface requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
:* The system must allow user to create their profile&lt;br /&gt;
:* &lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
The system must deliver correct informations all the time, so that : &lt;br /&gt;
** Clients could only connect to their instances&lt;br /&gt;
** Clients could know status of their instances&lt;br /&gt;
** Providers could know status of their machine&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
The system must be available 24h/24, 7days/7 since both providers and clients should be able to use it.&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
The security of the service must be optimal, clients should not be able to access information on instances of other clients. Furthermore, providers should also not be able to access container&#039;s information.&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
Updates have to be easy to do, in order to add new functionalities, improve the service easily.&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:RapportMPI_Iaas.pdf&amp;diff=27778</id>
		<title>File:RapportMPI Iaas.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:RapportMPI_Iaas.pdf&amp;diff=27778"/>
		<updated>2016-03-09T09:47:11Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27777</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27777"/>
		<updated>2016-03-09T09:46:50Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT Students&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* BONNARD Loïc&lt;br /&gt;
* CAPERAN Théo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez &lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:RapportMPI_Iaas.pdf|Management of innovative projects (MPI) report (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decide to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access to containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Speficication of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which make it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatize user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implements bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployement:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contains only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now it&#039;s behaviour allow us to have different disk usage for each instance. Now use a cron job, we won&#039;t need anymore to launch the script by ourself&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough information about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually development some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Start to write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Add a rating system which will be use to give a mark to providers.&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Coordinator and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients et their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27729</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27729"/>
		<updated>2016-03-08T10:18:04Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Product functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start providing&lt;br /&gt;
:** Stop providing&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==External interface requirements==&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27728</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27728"/>
		<updated>2016-03-08T10:14:40Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Product functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start to provide&lt;br /&gt;
:** Stop to provide&lt;br /&gt;
:** See resources consumption of the instances running on his machine&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==External interface requirements==&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27727</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27727"/>
		<updated>2016-03-08T10:12:54Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Scope of the product */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start to provide&lt;br /&gt;
:** Stop to provide&lt;br /&gt;
:** See resources consumption of the instances running on his machine &lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==External interface requirements==&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27726</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27726"/>
		<updated>2016-03-08T10:12:08Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* General description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
:*Client :&lt;br /&gt;
&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Ask for an instance precising required resources&lt;br /&gt;
:** Launch an instance&lt;br /&gt;
:** Connect to running instance&lt;br /&gt;
:** Stop an instance&lt;br /&gt;
:** Remove an instance&lt;br /&gt;
:** Give a mark to a provider&lt;br /&gt;
&lt;br /&gt;
:*Provider :&lt;br /&gt;
&lt;br /&gt;
:** Register to the service&lt;br /&gt;
:** Download required files&lt;br /&gt;
:** Launch coordinator system&lt;br /&gt;
:** Provide some of his resources&lt;br /&gt;
:** Start to provide&lt;br /&gt;
:** Stop to provide&lt;br /&gt;
:** See resources consumption of the instances running on his machine &lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
:* The client/provider doesn&#039;t have to be familiar with programming&lt;br /&gt;
:* The client/provider should know unix basics&lt;br /&gt;
:* The client/provider should know how ssh works&lt;br /&gt;
:* The provider should know how to launch a script in a terminal&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
:*System constraint:&lt;br /&gt;
:** The provider&#039;s machine must run on a unix system (Ubuntu for example)&lt;br /&gt;
&lt;br /&gt;
:*Environment constraint:&lt;br /&gt;
:** Internet access is required to use the service&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
:* The client/provider have an internet access&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==External interface requirements==&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:IaasUseCase.png&amp;diff=27725</id>
		<title>File:IaasUseCase.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:IaasUseCase.png&amp;diff=27725"/>
		<updated>2016-03-08T09:54:34Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27724</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27724"/>
		<updated>2016-03-08T09:54:23Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Product perspective */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT Students&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* BONNARD Loïc&lt;br /&gt;
* CAPERAN Théo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez &lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decide to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access to containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Speficication of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which make it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatize user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implements bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployement:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contains only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now it&#039;s behaviour allow us to have different disk usage for each instance. Now use a cron job, we won&#039;t need anymore to launch the script by ourself&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough information about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually development some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Start to write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Add a rating system which will be use to give a mark to providers.&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
[[File:IaasUseCase.png|center|thumb|1000px|Use case diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Coordinator and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients et their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:IaasContextDiagram.png&amp;diff=27723</id>
		<title>File:IaasContextDiagram.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:IaasContextDiagram.png&amp;diff=27723"/>
		<updated>2016-03-08T09:45:47Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27722</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27722"/>
		<updated>2016-03-08T09:45:35Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Product perspective */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT Students&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* BONNARD Loïc&lt;br /&gt;
* CAPERAN Théo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez &lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decide to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access to containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Speficication of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which make it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatize user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implements bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployement:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contains only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now it&#039;s behaviour allow us to have different disk usage for each instance. Now use a cron job, we won&#039;t need anymore to launch the script by ourself&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough information about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually development some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Start to write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Add a rating system which will be use to give a mark to providers.&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
[[File:IaasContextDiagram.png|center|thumb|1000px|Context diagram]]&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Coordinator and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients et their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27721</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27721"/>
		<updated>2016-03-08T09:44:55Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Ship More Software Faster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT Students&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* BONNARD Loïc&lt;br /&gt;
* CAPERAN Théo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez &lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decide to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access to containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Speficication of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which make it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatize user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implements bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployement:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contains only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now it&#039;s behaviour allow us to have different disk usage for each instance. Now use a cron job, we won&#039;t need anymore to launch the script by ourself&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough information about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually development some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Start to write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Add a rating system which will be use to give a mark to providers.&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
= Product perspective =&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Coordinator and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients et their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27720</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27720"/>
		<updated>2016-03-08T09:39:35Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[Projets-2015-2016-IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==External interface requirements==&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Projets-2015-2016-IaaS Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27719</id>
		<title>Projets-2015-2016-IaaS Docker-SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker-SRS&amp;diff=27719"/>
		<updated>2016-03-08T09:38:30Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: Created page with &amp;quot;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.   &amp;#039;&amp;#039;&amp;#039;Read first:&amp;#039;&amp;#039;&amp;#039; * http://www.cs.st-an...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Read first:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
==Purpose of the requirements document==&lt;br /&gt;
&lt;br /&gt;
:*This Software Requirements Specification (SRS) identifies the requirements for the [[IaaS Docker | Collaborative Iaas]] project .&lt;br /&gt;
:*This document is a guideline about the functionalities offered and the problems that the system solves.&lt;br /&gt;
&lt;br /&gt;
==Scope of the product==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitions, acronyms and abbreviations==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
:*The main page of the project: [[IaaS Docker | Collaborative Iaas]]&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the remainder of the document==&lt;br /&gt;
&lt;br /&gt;
:The rest of the SRS examines the specifications of the [[IaaS Docker | Collaborative Iaas]] project in details. Section two of the SRS presents the general factors that affect the [[IaaS Docker | Collaborative Iaas]] project and its requirements, such as user characteristics and project constraints. Section three outlines the detailed, specific and functional requirements, performance, system and other related requirements of the project. Supporting information about appendices is provided in Section three.&lt;br /&gt;
&lt;br /&gt;
=General description=&lt;br /&gt;
&lt;br /&gt;
==Product perspective==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Product functions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User characteristics==&lt;br /&gt;
&lt;br /&gt;
==General constraints==&lt;br /&gt;
&lt;br /&gt;
==Assumptions and dependencies==&lt;br /&gt;
&lt;br /&gt;
=Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
&lt;br /&gt;
==External interface requirements==&lt;br /&gt;
&lt;br /&gt;
==Functional requirements==&lt;br /&gt;
&lt;br /&gt;
==Performance requirements==&lt;br /&gt;
&lt;br /&gt;
==Design constraints==&lt;br /&gt;
&lt;br /&gt;
==Logical database requirement==&lt;br /&gt;
&lt;br /&gt;
==Software System attributes==&lt;br /&gt;
===Reliability===&lt;br /&gt;
&lt;br /&gt;
===Availability===&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
===Maintainability===&lt;br /&gt;
&lt;br /&gt;
===Portability===&lt;br /&gt;
:For the moment, the system will be available in Linux only for provider side&lt;br /&gt;
:However, if packages are available on other systems, we might release the system on other OS later.&lt;br /&gt;
&lt;br /&gt;
==Other requirements==&lt;br /&gt;
:*The system must be able to run on Linux 14 or higher&lt;br /&gt;
:*The system must not consume too much CPU&lt;br /&gt;
:*The system must not consume too much Memory&lt;br /&gt;
&lt;br /&gt;
=Product evolution=&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Specification ==&lt;br /&gt;
* The global project&#039;s page can be found [[Iass Docker | here]].&lt;br /&gt;
&lt;br /&gt;
==Licensing Requirements==&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=27718</id>
		<title>Projets 2015-2016</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=27718"/>
		<updated>2016-03-08T09:31:37Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Projet Semestre S10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2014-2015]] | [[Projets]] | [[Projets 2016-2017]]&amp;gt;&amp;gt;&lt;br /&gt;
=RICM=&lt;br /&gt;
==RICM3==&lt;br /&gt;
&lt;br /&gt;
==RICM4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi 7 mars&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: vous creusez la question, vous contactez l&#039;auteur du code si il y a lieux, vous faites un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), vous soumettez un patch, vous contactez l&#039;enseignant ou la personne suivant le projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle &lt;br /&gt;
indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par ricm4_2015_2016.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez utiliser un logiciel de gestion de version&#039;&#039;&#039; pour vos développements comme [http://en.wikipedia.org/wiki/Git_%28software%29 git ] et nous vous conseillons d&#039;utiliser le site [https://github.com github] pour l&#039;hébergement de votre dépôt public.&lt;br /&gt;
&lt;br /&gt;
* Les document public (exemple sur github) doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[Dashboard pour gestionnaire de tâches et de ressources]]&lt;br /&gt;
 | CROUZET, MATHIEU&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-DashBoard| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/MatthieuCrouzet/Projet4A &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_groupe1.pdf|Rapport Consultant]] - [[Media:Paterns.pdf|Patterns]] - [[Media:PresentationDashboard.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Speeding Simplified Script Language]]&lt;br /&gt;
 | POPEK, BERTRAND-DALECHAMPS, WEI&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-SSSL| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SSSL-UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/FlorianPO/Speeding-Simplified-Script-Language.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:Groupe2_AIR.pdf|Rapport Consultant]] - [[Media:PresentationProjet.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Borne interactive]] &lt;br /&gt;
 | DUNAND - NAVARRO - REVEL&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Borne-Interactive| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive/UML_Diagrams | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Kant73/InteractiveDisplay &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:IPopo.pdf|Rapport Consultant]] - [[Media:PatternDesign.pdf | &#039;&#039;&#039;Design Pattern&#039;&#039;&#039;]] - [[Media:PresentationInteractiveDisplay.pdf|Présentation Intermédiaire]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Sonotone]]&lt;br /&gt;
 | LECORPS, VOUTAT, Hattinguais	&lt;br /&gt;
 | Maisonnasse, Richard&lt;br /&gt;
 | [[Projets-2015-2016-Sonotone| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]  - [[Projets-2015-2016-Sonotone-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]]  &lt;br /&gt;
 | [https://github.com/Gorgorot38/Sonotone-RICM4 &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SRS_Consultant_Sonotone_4.pdf|Rapport_Consultant]] - [[Media:pattern_sonotone.pdf|Pattern]] - [[Media:Soutenance.pdf|Soutenance]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Sous-titre_en_temps_r%C3%A9el_d%27un_cours| Sous-titre d&#039;un cours en temps réel]]&lt;br /&gt;
 | LECHEVALLIER, BUI, OUNISSI &lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[LiveSubtitles| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lechevallier/RealTimeSubtitles &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media: SRS_Groupe_5.pdf| Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[GrenobloisFuté]]&lt;br /&gt;
 | MOURET, DELAPORTE,  Lucidarme&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[GrenobleFuté| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lucidarme/Osmand.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_G14.pdf|Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Streaming en stéréoscopie]]&lt;br /&gt;
 | ZHAO ZILONG, HAMMOUTI&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Streaming-Stereoscopie| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Streaming en stéréoscopie | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/zhao-zilong/streaming_stereo &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:bruel_medewou_ndiaye.pdf|Rapport_consultant]] - [[Media:streaming.pdf|mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[PersyCup2016]]&lt;br /&gt;
 | BIN, ZEGAOUI, ELLAPIN &lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[PersyCup| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/legominstorm/lego &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SoutenanceMiParcours-Persycup2016.pdf|Soutenance Mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Services étendus pour le modèle de composants iPOPO pour Python]]&lt;br /&gt;
 | FOUNAS, HALLAL, GATTAZ &lt;br /&gt;
 | Calmant &amp;amp; Donsez&lt;br /&gt;
 | [[Proj-2015-2016-Extensions_IPOPO | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/abdelazizFounas/ipopo/tree/tlsremote &#039;&#039;&#039;github IPOPO&#039;&#039;&#039;] &amp;lt;br /&amp;gt; [https://github.com/gattazr/IPOPO-Remote-Client &#039;&#039;&#039;github IPOPO Client&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:9_RapportProjet.pdf|Rapport]] - [[Media:9_TransparentsProojet.pdf|Transparents]] - [[Media:9_FlyerProjet.pdf|Flyer]] - [[Media:3-SRS-Pres.pdf| Rapport Consultant]] - [[Media:9_PatternStrat.pdf|Pattern Design]] - [[Media:9_Mid-Presentation.pdf|Mid Presentation]] - [[Media:9_Gantt.pdf|Gantt]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[IndoorGeoloc2016]]&lt;br /&gt;
 | ARRADA - CRASTES - FAURE - STOIAN					&lt;br /&gt;
 | Donsez&lt;br /&gt;
 | [[Proj-2015-2016-IndoorGeoloc/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-IndoorGeoloc/SRS|SRS]]&lt;br /&gt;
 | [https://github.com/xxx &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Proj-2015-2016-IndoorGeoloc/RapportProjet.pdf|Rapport]] - [[Media:Proj-2015-2016-IndoorGeoloc/TransparentsProjet.pdf|Transparents]] - [[Media:Proj-2015-2016-IndoorGeoloc/FlyerProjet.pdf|Flyer]] - [[Media: SRSGroupe17.pdf| Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[UPnPOpenHAB2016]]&lt;br /&gt;
 | Medewou , Ndiyae Yacine , Bruel Anna &lt;br /&gt;
 | Didier Donsez &amp;amp; Jérome Maisonnasse&lt;br /&gt;
 | [[Proj-Openhab-2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Int%C3%A9gration_de_cam%C3%A9ra_de_surveillance_UPnP_%C3%A0_Openhab/SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-Openhab/UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/openHab-UPnP &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_ZHAO_HAMMOUTI.pdf|Rapport Consultant]] - [[Media:pattern_ZHAO_HAMMOUTI.pdf|Patterns]] - [[Media:fichier.pdf|Mini soutenance]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[Sign2Speech]]&lt;br /&gt;
 | NIOGRET, NOGUERON, TITH&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[sign2speech_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Sign2Speech | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/SignToSpeech-Project &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:12-Sign2Speech-RapportConsultant.pdf|Rapport Consultant]] - [[Media:12-Sign2Speech-MidPres.pdf|Mid presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[AstroImage]] &lt;br /&gt;
 | RACHEX, BLANC, GERRY&lt;br /&gt;
 | Olivier Richard et Bruno Bzeznik&lt;br /&gt;
 | [[Proj-2015-2016-Astroimage/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[AstroImage/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Media:AstroImage-UML.pdf | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/nicolas-blanc/AstroImage &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:13-AstroImage-RapportConsultant.pdf|Rapport Consultant]] - [https://docs.google.com/presentation/d/15F8DRktwmOuSNabdxMASniyr-TIiRzGNNG1mOhcoSnk/edit?usp=sharing &#039;&#039;&#039;Patterns&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[Tachymètre]]&lt;br /&gt;
 | MACE, NOUGUIER, RAMEL&lt;br /&gt;
 | Olivier Gattaz&lt;br /&gt;
 | [[Fiche - Tachymètre | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Tachymètre| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - Tachymètre| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Quego/Tachymetre &#039;&#039;&#039;github - Tachymètre&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:srs_tachymetre.pdf|Rapport consultant]] - [[Media:14_PatternDesign.pdf‎ | Pattern Design]] - [[Media:Tachymetre_Presentation.pdf‎ | Présentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[SmartProjector]]&lt;br /&gt;
 | BRANGER, HABLOT&lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[Fiche_SmartProjector_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - SmartProjector| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - SmartProjector| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/P0ppoff/SmartProjector &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Rapport]] - [[Media:PresentationPorjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:Gl_groupe16.pdf|Rapport Consultant]] - [http://air.imag.fr/index.php/Patron_de_conception_-_SmartProjector patterns]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Liste de projets===&lt;br /&gt;
&lt;br /&gt;
* [[Dashboard pour gestionnaire de tâches et de ressources]], Olivier Richard&lt;br /&gt;
* [[Moteur distribué d&#039;exécution de commande]], Olivier Richard&lt;br /&gt;
* [[Environnement d&#039;expérimentation de pour NVIDIA Shield (Tegra X1)]], Olivier Richard   &lt;br /&gt;
* [[Speeding Simplified Script Language]], Olivier Richard&lt;br /&gt;
&lt;br /&gt;
* Aide (Open-Source)au Handicap Auditif, avec Didier Donsez, Jérome Maisonnasse, Marie-Paule Balicco (SAH UGA) et Nicolas Vuillerme&lt;br /&gt;
** [[Borne interactive]] (1 sujet)&lt;br /&gt;
** [[Sonotone]] (1 sujet)&lt;br /&gt;
** [[Sous-titre en temps réel d&#039;un cours]] (1 sujet)&lt;br /&gt;
* [[GrenobloisFuté]] Couche trafic sur OsmAnd avec un greffon. Données dynamique de la métro. Dvp Android. Nicolas Palix.&lt;br /&gt;
* [[GeoDiff]] Production, visualisation, fusion de variations (diff) sur de l&#039;information géocodée : Nicolas Palix&lt;br /&gt;
* [[Smart campus augmenté et contributif]] Didier Donsez, Vivien Quema&lt;br /&gt;
&lt;br /&gt;
* [[Streaming en stéréoscopie]] sur [[WebRTC]] avec rendu sur [[Oculus]] pour le robot [[RobAIR]], Jérôme Maisonnasse. ([http://gstconf.ubicast.tv/videos/stereoscopic-3d-video/ voir]).&lt;br /&gt;
* [[STM32F7]] : Mise en oeuvre de la chaîne de compilation sous Linux avec [[OpenSTM32]] et [[OpenOCD]]. Nicolas Palix&lt;br /&gt;
* [[PersyCup2016]] : Persyval Robocup, Didier Donsez, Vivien Quema, Jérome Maisonnasse. (3 étudiants)&lt;br /&gt;
* [[Services étendus pour le modèle de composants iPOPO pour Python]], Didier Donsez &amp;amp; Thomas Calmant. (2 étudiants)&lt;br /&gt;
* [[SmartClassRoom2016|Développement d&#039;une interface partagée pour tables tactiles (projet SmartClassRoom)]], Didier Donsez, Jérôme Maisonnasse. (2 étudiants)&lt;br /&gt;
* [[iRock2016|iRock : surveillance de glissement de terrains]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[IndoorGeoloc2016|Géolocalisation in-door au moyen de balises (beacon) BLE et Wifi à base de STM32 et de balises iBeacon &amp;amp; AltBeacon]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[UPnPOpenHAB2016|Intégration et gestion de caméras de surveillance UPnP dans la plateforme domotique open-source OpenHAB et myOpenHAB]], Didier Donsez &amp;amp; Jérome Maisonnasse.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projets non prioritaires&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Liveprogramming with Kivy]], Olivier Richard&lt;br /&gt;
* [[AstroImage]] production d&#039;image d&#039;astronomie, Olivier Richard et Bruno Bzeznik&lt;br /&gt;
* [[G-code Cruncher]] Controle de machine CNC (Nucleo grbl + esp8266 + Sdcard), Olivier Richard&lt;br /&gt;
* [[Intégration OpenHAB / OpenTele]] Nicolas Palix&lt;br /&gt;
&lt;br /&gt;
==RICM5==&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignant responsable : Didier Donsez&lt;br /&gt;
&lt;br /&gt;
Démarrage : Lundi 25/01 à 10H30-12H30, P253 (Rendez-vous devant la salle AIR) - Visioconf pour Thibaut Cordier&lt;br /&gt;
&lt;br /&gt;
Soutenance : Vendredi 18/03 à 8H30-12H30, P257 &lt;br /&gt;
&lt;br /&gt;
Etudiants : RICM5 + 8 étudiants Avosti DUT RT&lt;br /&gt;
&lt;br /&gt;
Rappel séances MPI&lt;br /&gt;
* Séance 1 : mardi 26 janvier après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 2 : mardi 2 février après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 3 : lundi 8 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 4 : jeudi 11 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 5 : lundi 21 mars matin - Stéphanie Diligent et Emmanuelle Tréhoust&lt;br /&gt;
&lt;br /&gt;
Planning soutenance (à venir).&lt;br /&gt;
* Bossa&lt;br /&gt;
* IaaS Docker&lt;br /&gt;
* Immersion EDF&lt;br /&gt;
* SmartCampus&lt;br /&gt;
* SmartClassRoom (en C005)&lt;br /&gt;
* Pot d&#039; &amp;quot;Au Revoir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM5 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [http://air.imag.fr/index.php/IaaS_collaboratif_avec_Docker IaaS - Docker]&lt;br /&gt;
 | Eudes Robin, Damotte Alan, Barthelemy Romain, Mammar Malek, Guo Kai, Bonnard Loïc, Caperan Théo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-IaaS_Docker| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-IaaS_Docker-SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/EudesRobin/iaas-collaboratif  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Rapport_IaaS.pdf|Rapport]] - [[Media:Transparents_IaaS.pdf|Transparents]] - [[Media:Flyer_IaaS.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [http://air.imag.fr/index.php/Portage_de_Bossa Portage de Bossa sur le Kernel Linux 4x]&lt;br /&gt;
 | Eric Michel Fotsing, Ombeline Rossi, Longfei Yao&lt;br /&gt;
 | Nicolas Palix, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-Portage_Bossa| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/ZenithKaizer/  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Rapport_Bossa.pdf|Rapport]] - [[Media:Transparents_Bossa.pdf|Transparents]] - [[Media:Flyer_Bossa.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Visite immersive en réalité virtuelle dans une usine avec EDF]]&lt;br /&gt;
 | Adam Christophe, Aissanou Sarah, Klipffel Tararaina, Qian Jean, Zominy Laurent&lt;br /&gt;
 | Didier Donsez, Georges-Pierre Bonneau, Thibaut Cordier (EDF)&lt;br /&gt;
 | [[Projets-2015-2016-VisiteImmersiveEDF| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/VisiteImmersiveEDF  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetX.pdf|Rapport]] - [[Media:TransparentsProojetX.pdf|Transparents]] - [[Media:FlyerProjetX.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Contribution à OpenSmartCampus]] (voir http://data.beta.metropolegrenoble.fr/)&lt;br /&gt;
 | Quentin Torck, Vivien Michel, Jérémy Hammerer, Rama Codazzi, Zhengmeng Zhang&lt;br /&gt;
 | Didier Donsez, Vivien Quéma&lt;br /&gt;
 | [[Projets-2015-2016-OpenSmartCampus| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/quentin74/SmartCampus.git  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetX.pdf|Rapport]] - [[Media:TransparentsProojetX.pdf|Transparents]] - [[Media:FlyerProjetX.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Contribution à SmartClassRoom]] (Interfaces tactiles distribuées et partagées)&lt;br /&gt;
 | Saussac Thibault, Toussaint Sébastien, Hamdani Youcef, Zoppello Sebastien, Melik sak, Mesnier Vincent&lt;br /&gt;
 | Jérôme Maisonnasse, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-SmartClassRoom| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/XXXX  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetSmartClassRoom.pdf|Rapport]] - [[Media:TransparentsProjetSmartClassRoom.pdf|Transparents]] - [[Media:FlyerProjetSmartClassRoom.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Projets annulés et reportés===&lt;br /&gt;
* Projet avec [[Tango Project]] (Annulé)&lt;br /&gt;
* Hack the Beam, Didier Donsez &amp;amp; Jérôme Maisonnasse.&lt;br /&gt;
* [[Algorithmes de suivi de personnes pour robot de téléprésence RobAIR]] (Jérôme Maisonnasse, Didier Donsez)&lt;br /&gt;
&lt;br /&gt;
=M2PGI=&lt;br /&gt;
==[[Projets M2PGI Services Machine-to-Machine|Projet Services Machine-to-Machine]]==&lt;br /&gt;
* [[PM2M/2016/TP|Sujet et groupes]]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=27717</id>
		<title>Projets 2015-2016</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2015-2016&amp;diff=27717"/>
		<updated>2016-03-08T09:31:13Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Projet Semestre S10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2014-2015]] | [[Projets]] | [[Projets 2016-2017]]&amp;gt;&amp;gt;&lt;br /&gt;
=RICM=&lt;br /&gt;
==RICM3==&lt;br /&gt;
&lt;br /&gt;
==RICM4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi 7 mars&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: vous creusez la question, vous contactez l&#039;auteur du code si il y a lieux, vous faites un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), vous soumettez un patch, vous contactez l&#039;enseignant ou la personne suivant le projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle &lt;br /&gt;
indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par ricm4_2015_2016.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez utiliser un logiciel de gestion de version&#039;&#039;&#039; pour vos développements comme [http://en.wikipedia.org/wiki/Git_%28software%29 git ] et nous vous conseillons d&#039;utiliser le site [https://github.com github] pour l&#039;hébergement de votre dépôt public.&lt;br /&gt;
&lt;br /&gt;
* Les document public (exemple sur github) doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[Dashboard pour gestionnaire de tâches et de ressources]]&lt;br /&gt;
 | CROUZET, MATHIEU&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-DashBoard| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/MatthieuCrouzet/Projet4A &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_groupe1.pdf|Rapport Consultant]] - [[Media:Paterns.pdf|Patterns]] - [[Media:PresentationDashboard.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Speeding Simplified Script Language]]&lt;br /&gt;
 | POPEK, BERTRAND-DALECHAMPS, WEI&lt;br /&gt;
 | Richard&lt;br /&gt;
 | [[Projets-2015-2016-SSSL| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SSSL-UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/FlorianPO/Speeding-Simplified-Script-Language.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:Groupe2_AIR.pdf|Rapport Consultant]] - [[Media:PresentationProjet.pdf|Presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Borne interactive]] &lt;br /&gt;
 | DUNAND - NAVARRO - REVEL&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Borne-Interactive| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Projets-2015-2016-Borne-Interactive/UML_Diagrams | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Kant73/InteractiveDisplay &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:IPopo.pdf|Rapport Consultant]] - [[Media:PatternDesign.pdf | &#039;&#039;&#039;Design Pattern&#039;&#039;&#039;]] - [[Media:PresentationInteractiveDisplay.pdf|Présentation Intermédiaire]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Sonotone]]&lt;br /&gt;
 | LECORPS, VOUTAT, Hattinguais	&lt;br /&gt;
 | Maisonnasse, Richard&lt;br /&gt;
 | [[Projets-2015-2016-Sonotone| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]  - [[Projets-2015-2016-Sonotone-SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]]  &lt;br /&gt;
 | [https://github.com/Gorgorot38/Sonotone-RICM4 &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SRS_Consultant_Sonotone_4.pdf|Rapport_Consultant]] - [[Media:pattern_sonotone.pdf|Pattern]] - [[Media:Soutenance.pdf|Soutenance]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Sous-titre_en_temps_r%C3%A9el_d%27un_cours| Sous-titre d&#039;un cours en temps réel]]&lt;br /&gt;
 | LECHEVALLIER, BUI, OUNISSI &lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[LiveSubtitles| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lechevallier/RealTimeSubtitles &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media: SRS_Groupe_5.pdf| Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[GrenobloisFuté]]&lt;br /&gt;
 | MOURET, DELAPORTE,  Lucidarme&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[GrenobleFuté| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Lucidarme/Osmand.git &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_G14.pdf|Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Streaming en stéréoscopie]]&lt;br /&gt;
 | ZHAO ZILONG, HAMMOUTI&lt;br /&gt;
 | Maisonnasse&lt;br /&gt;
 | [[Projets-2015-2016-Streaming-Stereoscopie| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Streaming en stéréoscopie | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/zhao-zilong/streaming_stereo &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:bruel_medewou_ndiaye.pdf|Rapport_consultant]] - [[Media:streaming.pdf|mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[PersyCup2016]]&lt;br /&gt;
 | BIN, ZEGAOUI, ELLAPIN &lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[PersyCup| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/legominstorm/lego &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:SoutenanceMiParcours-Persycup2016.pdf|Soutenance Mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Services étendus pour le modèle de composants iPOPO pour Python]]&lt;br /&gt;
 | FOUNAS, HALLAL, GATTAZ &lt;br /&gt;
 | Calmant &amp;amp; Donsez&lt;br /&gt;
 | [[Proj-2015-2016-Extensions_IPOPO | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-2015-2016-Extensions_IPOPO/UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]] &lt;br /&gt;
 | [https://github.com/abdelazizFounas/ipopo/tree/tlsremote &#039;&#039;&#039;github IPOPO&#039;&#039;&#039;] &amp;lt;br /&amp;gt; [https://github.com/gattazr/IPOPO-Remote-Client &#039;&#039;&#039;github IPOPO Client&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:9_RapportProjet.pdf|Rapport]] - [[Media:9_TransparentsProojet.pdf|Transparents]] - [[Media:9_FlyerProjet.pdf|Flyer]] - [[Media:3-SRS-Pres.pdf| Rapport Consultant]] - [[Media:9_PatternStrat.pdf|Pattern Design]] - [[Media:9_Mid-Presentation.pdf|Mid Presentation]] - [[Media:9_Gantt.pdf|Gantt]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[IndoorGeoloc2016]]&lt;br /&gt;
 | ARRADA - CRASTES - FAURE - STOIAN					&lt;br /&gt;
 | Donsez&lt;br /&gt;
 | [[Proj-2015-2016-IndoorGeoloc/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-IndoorGeoloc/SRS|SRS]]&lt;br /&gt;
 | [https://github.com/xxx &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Proj-2015-2016-IndoorGeoloc/RapportProjet.pdf|Rapport]] - [[Media:Proj-2015-2016-IndoorGeoloc/TransparentsProjet.pdf|Transparents]] - [[Media:Proj-2015-2016-IndoorGeoloc/FlyerProjet.pdf|Flyer]] - [[Media: SRSGroupe17.pdf| Rapport Consultant]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[UPnPOpenHAB2016]]&lt;br /&gt;
 | Medewou , Ndiyae Yacine , Bruel Anna &lt;br /&gt;
 | Didier Donsez &amp;amp; Jérome Maisonnasse&lt;br /&gt;
 | [[Proj-Openhab-2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[Proj-2015-2016-Int%C3%A9gration_de_cam%C3%A9ra_de_surveillance_UPnP_%C3%A0_Openhab/SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Proj-Openhab/UML| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/openHab-UPnP &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:gl_ZHAO_HAMMOUTI.pdf|Rapport Consultant]] - [[Media:pattern_ZHAO_HAMMOUTI.pdf|Patterns]] - [[Media:fichier.pdf|Mini soutenance]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[Sign2Speech]]&lt;br /&gt;
 | NIOGRET, NOGUERON, TITH&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[sign2speech_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Sign2Speech | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/SignToSpeech-Project &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:12-Sign2Speech-RapportConsultant.pdf|Rapport Consultant]] - [[Media:12-Sign2Speech-MidPres.pdf|Mid presentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[AstroImage]] &lt;br /&gt;
 | RACHEX, BLANC, GERRY&lt;br /&gt;
 | Olivier Richard et Bruno Bzeznik&lt;br /&gt;
 | [[Proj-2015-2016-Astroimage/Fiche| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[AstroImage/SRS | &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[Media:AstroImage-UML.pdf | &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/nicolas-blanc/AstroImage &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]]  - [[Media:13-AstroImage-RapportConsultant.pdf|Rapport Consultant]] - [https://docs.google.com/presentation/d/15F8DRktwmOuSNabdxMASniyr-TIiRzGNNG1mOhcoSnk/edit?usp=sharing &#039;&#039;&#039;Patterns&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[Tachymètre]]&lt;br /&gt;
 | MACE, NOUGUIER, RAMEL&lt;br /&gt;
 | Olivier Gattaz&lt;br /&gt;
 | [[Fiche - Tachymètre | &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - Tachymètre| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - Tachymètre| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Quego/Tachymetre &#039;&#039;&#039;github - Tachymètre&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjet.pdf|Rapport]] - [[Media:TransparentsProojet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:srs_tachymetre.pdf|Rapport consultant]] - [[Media:14_PatternDesign.pdf‎ | Pattern Design]] - [[Media:Tachymetre_Presentation.pdf‎ | Présentation]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[SmartProjector]]&lt;br /&gt;
 | BRANGER, HABLOT&lt;br /&gt;
 | Donsez, Maisonnasse&lt;br /&gt;
 | [[Fiche_SmartProjector_ricm4_2015_2016| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]] - [[SRS - SmartProjector| &#039;&#039;&#039;SRS&#039;&#039;&#039;]] - [[UML - SmartProjector| &#039;&#039;&#039;UML&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/P0ppoff/SmartProjector &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Rapport]] - [[Media:PresentationPorjet.pdf|Transparents]] - [[Media:FlyerProjet.pdf|Flyer]] - [[Media:Gl_groupe16.pdf|Rapport Consultant]] - [http://air.imag.fr/index.php/Patron_de_conception_-_SmartProjector patterns]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Liste de projets===&lt;br /&gt;
&lt;br /&gt;
* [[Dashboard pour gestionnaire de tâches et de ressources]], Olivier Richard&lt;br /&gt;
* [[Moteur distribué d&#039;exécution de commande]], Olivier Richard&lt;br /&gt;
* [[Environnement d&#039;expérimentation de pour NVIDIA Shield (Tegra X1)]], Olivier Richard   &lt;br /&gt;
* [[Speeding Simplified Script Language]], Olivier Richard&lt;br /&gt;
&lt;br /&gt;
* Aide (Open-Source)au Handicap Auditif, avec Didier Donsez, Jérome Maisonnasse, Marie-Paule Balicco (SAH UGA) et Nicolas Vuillerme&lt;br /&gt;
** [[Borne interactive]] (1 sujet)&lt;br /&gt;
** [[Sonotone]] (1 sujet)&lt;br /&gt;
** [[Sous-titre en temps réel d&#039;un cours]] (1 sujet)&lt;br /&gt;
* [[GrenobloisFuté]] Couche trafic sur OsmAnd avec un greffon. Données dynamique de la métro. Dvp Android. Nicolas Palix.&lt;br /&gt;
* [[GeoDiff]] Production, visualisation, fusion de variations (diff) sur de l&#039;information géocodée : Nicolas Palix&lt;br /&gt;
* [[Smart campus augmenté et contributif]] Didier Donsez, Vivien Quema&lt;br /&gt;
&lt;br /&gt;
* [[Streaming en stéréoscopie]] sur [[WebRTC]] avec rendu sur [[Oculus]] pour le robot [[RobAIR]], Jérôme Maisonnasse. ([http://gstconf.ubicast.tv/videos/stereoscopic-3d-video/ voir]).&lt;br /&gt;
* [[STM32F7]] : Mise en oeuvre de la chaîne de compilation sous Linux avec [[OpenSTM32]] et [[OpenOCD]]. Nicolas Palix&lt;br /&gt;
* [[PersyCup2016]] : Persyval Robocup, Didier Donsez, Vivien Quema, Jérome Maisonnasse. (3 étudiants)&lt;br /&gt;
* [[Services étendus pour le modèle de composants iPOPO pour Python]], Didier Donsez &amp;amp; Thomas Calmant. (2 étudiants)&lt;br /&gt;
* [[SmartClassRoom2016|Développement d&#039;une interface partagée pour tables tactiles (projet SmartClassRoom)]], Didier Donsez, Jérôme Maisonnasse. (2 étudiants)&lt;br /&gt;
* [[iRock2016|iRock : surveillance de glissement de terrains]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[IndoorGeoloc2016|Géolocalisation in-door au moyen de balises (beacon) BLE et Wifi à base de STM32 et de balises iBeacon &amp;amp; AltBeacon]], Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
* [[UPnPOpenHAB2016|Intégration et gestion de caméras de surveillance UPnP dans la plateforme domotique open-source OpenHAB et myOpenHAB]], Didier Donsez &amp;amp; Jérome Maisonnasse.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projets non prioritaires&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Liveprogramming with Kivy]], Olivier Richard&lt;br /&gt;
* [[AstroImage]] production d&#039;image d&#039;astronomie, Olivier Richard et Bruno Bzeznik&lt;br /&gt;
* [[G-code Cruncher]] Controle de machine CNC (Nucleo grbl + esp8266 + Sdcard), Olivier Richard&lt;br /&gt;
* [[Intégration OpenHAB / OpenTele]] Nicolas Palix&lt;br /&gt;
&lt;br /&gt;
==RICM5==&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignant responsable : Didier Donsez&lt;br /&gt;
&lt;br /&gt;
Démarrage : Lundi 25/01 à 10H30-12H30, P253 (Rendez-vous devant la salle AIR) - Visioconf pour Thibaut Cordier&lt;br /&gt;
&lt;br /&gt;
Soutenance : Vendredi 18/03 à 8H30-12H30, P257 &lt;br /&gt;
&lt;br /&gt;
Etudiants : RICM5 + 8 étudiants Avosti DUT RT&lt;br /&gt;
&lt;br /&gt;
Rappel séances MPI&lt;br /&gt;
* Séance 1 : mardi 26 janvier après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 2 : mardi 2 février après midi - Stéphanie Diligent&lt;br /&gt;
* Séance 3 : lundi 8 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 4 : jeudi 11 février matin - Emmanuelle Tréhoust&lt;br /&gt;
* Séance 5 : lundi 21 mars matin - Stéphanie Diligent et Emmanuelle Tréhoust&lt;br /&gt;
&lt;br /&gt;
Planning soutenance (à venir).&lt;br /&gt;
* Bossa&lt;br /&gt;
* IaaS Docker&lt;br /&gt;
* Immersion EDF&lt;br /&gt;
* SmartCampus&lt;br /&gt;
* SmartClassRoom (en C005)&lt;br /&gt;
* Pot d&#039; &amp;quot;Au Revoir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM5 2015-2016&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [http://air.imag.fr/index.php/IaaS_collaboratif_avec_Docker IaaS - Docker]&lt;br /&gt;
 | Eudes Robin, Damotte Alan, Barthelemy Romain, Mammar Malek, Guo Kai, Bonnard Loïc, Caperan Théo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-IaaS_Docker| &#039;&#039;&#039;Fiche&#039;&#039;&#039;] - [Projets-2015-2016-IaaS_Docker-SRS| &#039;&#039;&#039;SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/EudesRobin/iaas-collaboratif  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Rapport_IaaS.pdf|Rapport]] - [[Media:Transparents_IaaS.pdf|Transparents]] - [[Media:Flyer_IaaS.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [http://air.imag.fr/index.php/Portage_de_Bossa Portage de Bossa sur le Kernel Linux 4x]&lt;br /&gt;
 | Eric Michel Fotsing, Ombeline Rossi, Longfei Yao&lt;br /&gt;
 | Nicolas Palix, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-Portage_Bossa| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/ZenithKaizer/  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:Rapport_Bossa.pdf|Rapport]] - [[Media:Transparents_Bossa.pdf|Transparents]] - [[Media:Flyer_Bossa.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Visite immersive en réalité virtuelle dans une usine avec EDF]]&lt;br /&gt;
 | Adam Christophe, Aissanou Sarah, Klipffel Tararaina, Qian Jean, Zominy Laurent&lt;br /&gt;
 | Didier Donsez, Georges-Pierre Bonneau, Thibaut Cordier (EDF)&lt;br /&gt;
 | [[Projets-2015-2016-VisiteImmersiveEDF| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/VisiteImmersiveEDF  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetX.pdf|Rapport]] - [[Media:TransparentsProojetX.pdf|Transparents]] - [[Media:FlyerProjetX.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Contribution à OpenSmartCampus]] (voir http://data.beta.metropolegrenoble.fr/)&lt;br /&gt;
 | Quentin Torck, Vivien Michel, Jérémy Hammerer, Rama Codazzi, Zhengmeng Zhang&lt;br /&gt;
 | Didier Donsez, Vivien Quéma&lt;br /&gt;
 | [[Projets-2015-2016-OpenSmartCampus| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/quentin74/SmartCampus.git  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetX.pdf|Rapport]] - [[Media:TransparentsProojetX.pdf|Transparents]] - [[Media:FlyerProjetX.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Contribution à SmartClassRoom]] (Interfaces tactiles distribuées et partagées)&lt;br /&gt;
 | Saussac Thibault, Toussaint Sébastien, Hamdani Youcef, Zoppello Sebastien, Melik sak, Mesnier Vincent&lt;br /&gt;
 | Jérôme Maisonnasse, Didier Donsez&lt;br /&gt;
 | [[Projets-2015-2016-SmartClassRoom| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/XXXX  &#039;&#039;&#039;github&#039;&#039;&#039;]&lt;br /&gt;
 | [[Media:RapportProjetSmartClassRoom.pdf|Rapport]] - [[Media:TransparentsProjetSmartClassRoom.pdf|Transparents]] - [[Media:FlyerProjetSmartClassRoom.pdf|Flyer]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Projets annulés et reportés===&lt;br /&gt;
* Projet avec [[Tango Project]] (Annulé)&lt;br /&gt;
* Hack the Beam, Didier Donsez &amp;amp; Jérôme Maisonnasse.&lt;br /&gt;
* [[Algorithmes de suivi de personnes pour robot de téléprésence RobAIR]] (Jérôme Maisonnasse, Didier Donsez)&lt;br /&gt;
&lt;br /&gt;
=M2PGI=&lt;br /&gt;
==[[Projets M2PGI Services Machine-to-Machine|Projet Services Machine-to-Machine]]==&lt;br /&gt;
* [[PM2M/2016/TP|Sujet et groupes]]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Flyer_IaaS.pdf&amp;diff=27716</id>
		<title>File:Flyer IaaS.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Flyer_IaaS.pdf&amp;diff=27716"/>
		<updated>2016-03-08T09:29:08Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27715</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27715"/>
		<updated>2016-03-08T09:16:23Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Roadmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT Students&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* BONNARD Loïc&lt;br /&gt;
* CAPERAN Théo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez &lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
* Implement public profile: at the moment, users can only access their private profile. We imagine that we can consult providers profile to see which one is best rated&lt;br /&gt;
* Add the possibility for clients to use the rating system to choose only the best rated providers (special package, more expensive of course)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network): it&#039;s better for both clients and providers to be on the same geographical area&lt;br /&gt;
* Implement active replication in case a provider suddenly stops his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decide to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains (difficult): since providers are admin of their machine they can see what the containers contain, or enter the containers. It would be good to guarantee clients that their instances are totally safe, and no one, including the provider, can access their information.&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access to containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Speficication of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which make it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatize user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implements bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployement:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contains only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now it&#039;s behaviour allow us to have different disk usage for each instance. Now use a cron job, we won&#039;t need anymore to launch the script by ourself&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough information about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually development some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Start to write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Add a rating system which will be use to give a mark to providers.&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Coordinator and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients et their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27714</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27714"/>
		<updated>2016-03-08T09:07:39Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Week 7: Mars 7th  - Mars 13th */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT Students&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* BONNARD Loïc&lt;br /&gt;
* CAPERAN Théo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez &lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network)&lt;br /&gt;
* Implement active replication in case a provider suddenly stop his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decide to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access to containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Speficication of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which make it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatize user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implements bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployement:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contains only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now it&#039;s behaviour allow us to have different disk usage for each instance. Now use a cron job, we won&#039;t need anymore to launch the script by ourself&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough information about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually development some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
* Finish creating the flyer&lt;br /&gt;
* Start to write report for our last MPI course&lt;br /&gt;
* End of Rabbitmq set up on front-end&lt;br /&gt;
* Add a rating system which will be use to give a mark to providers.&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Coordinator and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients et their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27713</id>
		<title>Projets-2015-2016-IaaS Docker</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-IaaS_Docker&amp;diff=27713"/>
		<updated>2016-03-08T09:06:09Z</updated>

		<summary type="html">&lt;p&gt;Alan.Damotte: /* Roadmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:collaborativIaas.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
= Project presentation =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The objective of this project is to allow a user group (member) to pool their laptops or desktop in order to calculate big data of few users. To do so, the solution should work with Docker to virtualize user machines and control the use of resources of each machine.&lt;br /&gt;
&lt;br /&gt;
Project under GPLv3 licence : https://www.gnu.org/licenses/gpl-3.0.fr.html&lt;br /&gt;
&lt;br /&gt;
== The team ==&lt;br /&gt;
&#039;&#039;&#039;RICM5 students&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* EUDES Robin&lt;br /&gt;
* DAMOTTE Alan&lt;br /&gt;
* BARTHELEMY Romain&lt;br /&gt;
* MAMMAR Malek&lt;br /&gt;
* GUO Kai&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT Students&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* BONNARD Loïc&lt;br /&gt;
* CAPERAN Théo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Supervisors&#039;&#039;&#039;&lt;br /&gt;
Pierre-Yves Gibello (Linagora), Vincent Zurczak (Linagora), Didier Donsez &lt;br /&gt;
&lt;br /&gt;
== Deliverables ==&lt;br /&gt;
[https://github.com/EudesRobin/iaas-collaboratif Github repository]&lt;br /&gt;
&lt;br /&gt;
[https://waffle.io/EudesRobin/iaas-collaboratif Waffle.io]&lt;br /&gt;
&lt;br /&gt;
[[Media:CahierdeschargesIaas.pdf|Specifications (written in French)]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
Our waffle shows our current roadmap and the different tasks we are working on.&lt;br /&gt;
The aim of this section is to gather all the ideas we have which would be good to implement in the future to improve the service (after the end of our project).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;User experience:&#039;&#039;&#039;&lt;br /&gt;
* Add a way to report bad behaviour of providers or clients&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Algorithms:&#039;&#039;&#039;&lt;br /&gt;
* Implement algorithm that optimize geographic allocation between providers and clients (better network)&lt;br /&gt;
* Implement active replication in case a provider suddenly stop his machine&lt;br /&gt;
* Reallocate the instances to another provider when the first one decide to cleanly stop his machine (docker commit/docker pull)&lt;br /&gt;
* Optimize disk usage and bandwidth allocation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Security:&#039;&#039;&#039;&lt;br /&gt;
* Find way to prevent provider to enter in the instance and do whatever he wants, or see what each instances running on his machines contains&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetary system:&#039;&#039;&#039;&lt;br /&gt;
* Implement monetary system for providers and clients&lt;br /&gt;
* Set different possible packages at different prices and for different levels of service&lt;br /&gt;
&lt;br /&gt;
= Planning =&lt;br /&gt;
&lt;br /&gt;
[[File:gantt_iaas.png|center|thumb|1000px|Preliminary Gantt chart]]&lt;br /&gt;
[[File:gantt0309_iaas.png|center|thumb|1000px|Gantt chart at March 9th]]&lt;br /&gt;
&lt;br /&gt;
=== Week 1: January 25th - January 31th ===&lt;br /&gt;
* Getting familiar with Docker (for some of the group members)&lt;br /&gt;
* Fix Docker&#039;s DNS issue using public network (wifi-campus/eduroam)&lt;br /&gt;
* Contacting our supervisors&lt;br /&gt;
* First thoughts on this project, what we could do&lt;br /&gt;
* Redaction of specifications, creation of architecture diagrams&lt;br /&gt;
* Create scripts that start/stop containers automatically (some modifications still need to be done)&lt;br /&gt;
&lt;br /&gt;
=== Week 2: February 1st  - February 7th ===&lt;br /&gt;
* Manage and limit space disk usage of each container, limit resources allocation at containers&#039; launch.&lt;br /&gt;
** CPU and memory allocation: ok&lt;br /&gt;
** Docker doesn&#039;t seem to implement easy way to limit container&#039;s disk usage: implementing a watchdog (script) which will check container&#039;s disk usage and stop those that exceed a limit&lt;br /&gt;
* Think about restricted access to Docker containers: for the moment, providers are admin and can easily access to containers&lt;br /&gt;
* See how instances can easily give their network information to coordinator &lt;br /&gt;
* Get familiar with Shinken and study the possibilities&lt;br /&gt;
* Speficication of technologies used&lt;br /&gt;
* End of specification redaction + feedback from tutors&lt;br /&gt;
* Start to work on Meteor-AngularJS tutorials&lt;br /&gt;
* Configure a personal VM for the frontend &amp;amp; setup meteor-angular on it&lt;br /&gt;
&lt;br /&gt;
=== Week 3: February 8th  - February 14th ===&lt;br /&gt;
* &#039;&#039;&#039;Objective for this week:&#039;&#039;&#039; get a prototype that contains a basic front-end which make it possible to launch remote Docker instance.&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Deploy all containers on the same network: that allows us to connect to the instances from the coordinator&lt;br /&gt;
** Create user on host: will be used to connect ourselves in ssh from coordinator instance to host and launch deployment scripts&lt;br /&gt;
** Create script that totally automatize user creation, images creation and build, coordinator&#039;s and shinken&#039;s containers launch&lt;br /&gt;
* At the end of the week, the prototype is working: we can launch an instance an a provider machine from the front-end. We still need to establish and test the connection between a client and his instance. We have a good cornerstone of our project yet.&lt;br /&gt;
&lt;br /&gt;
=== Week 4: February 15th  - February 21st ===&lt;br /&gt;
* Try to establish connection between a client and his container&lt;br /&gt;
* Continue client/provider&#039;s web page development on front-end&lt;br /&gt;
* Start editing help page&lt;br /&gt;
* Correct some responsive effects on the site&lt;br /&gt;
* Container deployment: &lt;br /&gt;
** Implements bandwidth restriction&lt;br /&gt;
** Create script that automatically set client public key in container&#039;s authorized_keys file, modify some script to automatically delete client public key in coordinator&#039;s authorized_keys file&lt;br /&gt;
* Start to study and set up Rabbitmq (publish from provider to front-end for example)&lt;br /&gt;
&lt;br /&gt;
=== Week 5: February 22nd  - February 28th (Vacation) ===&lt;br /&gt;
* Update wiki/help page, work on some responsive issues on the website&lt;br /&gt;
* Establish script that automatically create SSH-jump config for the client&lt;br /&gt;
* Work on foreign keys and database (front-end side)&lt;br /&gt;
* Continue front-end development&lt;br /&gt;
* Establish rabbitmq on both front-end side and provider side&lt;br /&gt;
&lt;br /&gt;
=== Week 6: February 29th  - Mars 6th ===&lt;br /&gt;
* Container&#039;s deployement:&lt;br /&gt;
** Modify coordinator Dockerfile to install nodejs&lt;br /&gt;
** Create a cron job that will run a command every 30 seconds: that command will be used to send the file that contains container&#039;s information to rabbitmq server&lt;br /&gt;
** Modify coordinator to set up 2 users: one for the front-end and one for the clients. Each one will contains only the public key they need in authorized_keys&#039; file&lt;br /&gt;
** Modify startProvider script to check is ssh-server is installed and running on provider, and change default port (22 to 22000)&lt;br /&gt;
** Modify watchdog functioning: up to now, the script was just checking if each instance was respecting a limit. Now it&#039;s behaviour allow us to have different disk usage for each instance. Now use a cron job, we won&#039;t need anymore to launch the script by ourself&lt;br /&gt;
** Change monitoring system: we found an other monitoring system for Docker called cAdvisor which gives us enough information about containers.&lt;br /&gt;
&lt;br /&gt;
* Frontend dev:&lt;br /&gt;
** Generate a proper &amp;amp; unique instance name : &amp;lt;username&amp;gt;-&amp;lt;provider_domain_name&amp;gt;-&amp;lt;num_instance_user_at_provider&amp;gt; eg. : toto-domain1-0&lt;br /&gt;
** Add form to modify provider machines informations&lt;br /&gt;
** Fix warning &amp;quot;CSS file deliver as html file&amp;quot; by Meteor&lt;br /&gt;
** Add README to explain how to use scripts, how files are organized (for github branch : frontendWebui , docker , master )&lt;br /&gt;
** Improve user feedback (notifications) on errors/success&lt;br /&gt;
** Proper parameters to start/stop instances&lt;br /&gt;
** Add username field in profile&lt;br /&gt;
** Resolve bugs occurring when the machines allocate resources from a different user&lt;br /&gt;
&lt;br /&gt;
*Test and feedback:&lt;br /&gt;
** Set up the main test: container deployment and access to instance from the client&lt;br /&gt;
** Some permissions on coordinator instance needed to be changed&lt;br /&gt;
** SSH default configuration needed to be changed to: disable root login and authentication by password&lt;br /&gt;
** Connection from client to his instance is working&lt;br /&gt;
=&amp;gt; The main development phase is finished since we have a working base. We still need to improve some things, eventually development some advanced functionalities during the last two weeks.&lt;br /&gt;
&lt;br /&gt;
=== Week 7: Mars 7th  - Mars 13th ===&lt;br /&gt;
&lt;br /&gt;
=== Week 8: Mars 14th  - Mars 18th ===&lt;br /&gt;
&lt;br /&gt;
=What is Docker?=&lt;br /&gt;
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. &lt;br /&gt;
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lightweight:&#039;&#039;&#039;&lt;br /&gt;
Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM. Images are constructed from layered filesystems so they can share common files, making disk usage and image downloads much more efficient.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Open:&#039;&#039;&#039;&lt;br /&gt;
Docker containers are based on open standards allowing containers to run on all major Linux distributions and Microsoft operating systems with support for every infrastructure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secure:&#039;&#039;&#039;&lt;br /&gt;
Containers isolate applications from each other and the underlying infrastructure while providing an added layer of protection for the application.&lt;br /&gt;
&lt;br /&gt;
==How is this different from virtual machines?==&lt;br /&gt;
[[File:VM_vsContainer.png|200px|thumb|Virtual machines]][[File:Container_vsVM.png|200px|thumb|Docker containers]]&lt;br /&gt;
&lt;br /&gt;
Containers have similar resource isolation and allocation benefits as virtual machines but a different architectural approach allows them to be much more portable and efficient. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtual Machines:&#039;&#039;&#039;&lt;br /&gt;
Each virtual machine includes the application, the necessary binaries and libraries and an entire guest operating system - all of which may be tens of GBs in size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Containers:&#039;&#039;&#039;&lt;br /&gt;
Containers include the application and all of its dependencies, but share the kernel with other containers. They run as an isolated process in userspace on the host operating system. They’re also not tied to any specific infrastructure – Docker containers run on any computer, on any infrastructure and in any cloud.&lt;br /&gt;
&lt;br /&gt;
==How does this help you build better software?==&lt;br /&gt;
When your app is in Docker containers, you don’t have to worry about setting up and maintaining different environments or different tooling for each language. Focus on creating new features, fixing issues and shipping software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accelerate Developer Onboarding:&#039;&#039;&#039;&lt;br /&gt;
Stop wasting hours trying to setup developer environments, spin up new instances and make copies of production code to run locally. With Docker, you can easily take copies of your live environment and run on any new endpoint running Docker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empower Developer Creativity:&#039;&#039;&#039;&lt;br /&gt;
The isolation capabilities of Docker containers free developers from the worries of using “approved” language stacks and tooling. Developers can use the best language and tools for their application service without worrying about causing conflict issues.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eliminate Environment Inconsistencies:&#039;&#039;&#039;&lt;br /&gt;
By packaging up the application with its configs and dependencies together and shipping as a container, the application will always work as designed locally, on another machine, in test or production. No more worries about having to install the same configs into a different environment.&lt;br /&gt;
&lt;br /&gt;
==Easily Share and Collaborate on Applications==&lt;br /&gt;
&lt;br /&gt;
Docker creates a common framework for developers and sysadmins to work together on distributed applications&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distribute and share content:&#039;&#039;&#039;&lt;br /&gt;
Store, distribute and manage your Docker images in your Docker Hub with your team. Image updates, changes and history are automatically shared across your organization.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simply share your application with others:&#039;&#039;&#039;&lt;br /&gt;
Ship one or many containers to others or downstream service teams without worrying about different environment dependencies creating issues with your application. Other teams can easily link to or test against your app without having to learn or worry about how it works.&lt;br /&gt;
&lt;br /&gt;
==Ship More Software Faster==&lt;br /&gt;
&lt;br /&gt;
Docker allows you to dynamically change your application like never before from adding new capabilities, scaling out services to quickly changing problem areas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ship 7X More:&#039;&#039;&#039;&lt;br /&gt;
Docker users on average ship software 7X more after deploying Docker in their environment. More frequent updates provide more value to your customers faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quickly Scale:&#039;&#039;&#039;&lt;br /&gt;
Docker containers spin up and down in seconds making it easy to scale an application service at any time to satisfy peak customer demand, then just as easily spin down those containers to only use the resources you need when you need it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Easily Remediate Issues:&#039;&#039;&#039;&lt;br /&gt;
Docker make it easy to identify issues and isolate the problem container, quickly roll back to make the necessary changes then push the updated container into production. The isolation between containers make these changes less disruptive than traditional software models.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= System Architecture =&lt;br /&gt;
== Instances allocation ==&lt;br /&gt;
[[File:Infrastructure_globale.png|center|thumb|1000px|Global infrastructure]]&lt;br /&gt;
&lt;br /&gt;
== SSH connections to allocated instances ==&lt;br /&gt;
[[File:Infra_generale_network.png|center|thumb|1000px|Network global infrastructure]] &lt;br /&gt;
 &lt;br /&gt;
[[File:Legend_infra.png|center|thumb|1000px|Caption]]&lt;br /&gt;
&lt;br /&gt;
== Coordinator and Frontend details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Coordinator.png]][[File:Frontend.png]]&lt;br /&gt;
&lt;br /&gt;
= Containers&#039; automatic deployment =&lt;br /&gt;
&lt;br /&gt;
The aim of this part is to automatize the containers deployment on provider side. This includes launching coordinator instance and monitoring instance (shinken). The coordinator instance will allow us to launch new containers and establish the link between clients et their containers.&lt;br /&gt;
&lt;br /&gt;
[[File:Provider_functioning.png|center|thumb|1000px|Provider functioning]]&lt;br /&gt;
&lt;br /&gt;
== Build and run ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;First step: user creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since we can only interact with the coordinator instance from the front-end, we need a way to launch new container. It&#039;s not possible to do so from a container, and that task need to be done from the host. That&#039;s why the first step is to create a new user on provider machine we will use to launch new containers or stop them. The moment it is done, we deploy necessary scripts in this user&#039;s home. Those scripts are necessary to launch and stop new containers. It is simpler for us to do so than transferring those files from the coordinator to the host when the connection is established.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Second step: images creation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Then, the second step consists in building coordinator and monitoring (shinken) images. To do so we use Dockerfile that allow us to build a container containing all we need. The coordinator instance just contains a ssh web-server. That container exposes it&#039;s port 22 and will be used as a jump host to connect the front-end/clients to the other instances.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Third step: coordinator and monitoring instance deployment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, when the images are successfully built, we can run these containers on Docker deamon. We are now able to connect the front-end to the coordinator instance and deploy instances.&lt;br /&gt;
&lt;br /&gt;
== Resources management ==&lt;br /&gt;
&lt;br /&gt;
Docker already provides some functionalities which allow us to restrict CPU and memory usage. However, we needed to implement some functionalities ourselves like space disk usage and bandwidth restriction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CPU:&#039;&#039;&#039; To restrict CPU usage, we just need to know the hyper-threading coefficient and remember which CPU is already used. There is a Docker option we can use while launching container that allow us to choose which CPU the container will use to run. &lt;br /&gt;
The example below shows how this works with 4 CPU (and hyper-threading coefficient is 2).&lt;br /&gt;
&lt;br /&gt;
[[File:CPUShare.png|center|thumb|1000px|CPU share]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Memory:&#039;&#039;&#039; While launching a container, we set memory soft limit as the value required/reserved by the client. The hard limit is set as the maximum memory made available by the provider In doing so, a container can use more memory that his soft limit. But if several containers are running on the same host, Docker will ensure that each container doesn&#039;t consume more memory than his soft limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disk:&#039;&#039;&#039; Docker doesn&#039;t seem to provide a functionality to restrict disk usage. And yet, it&#039;s really important for us to make sure that a client will not use to much space disk of the provider. To do so, we implemented a watchdog that check every 30 seconds the disk usage of each container and stop them if they reach the limit defined by the provider. We also use that watchdog to inspect and save container&#039;s information that will be used on the front-end to display container&#039;s state and space disk usage. Thanks to that, clients will know if they are about to reach the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bandwidth:&#039;&#039;&#039; Since all the containers run on the same Docker network, we are able to use Wondershaper to set a limit for bandwidth usage. Then, Docker takes care to divide equitably the available bandwidth to each container.&lt;br /&gt;
&lt;br /&gt;
= Useful links =&lt;br /&gt;
&lt;br /&gt;
== Network related ==&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/SSH_jump_host SSH Jump Host]&lt;br /&gt;
&lt;br /&gt;
== Git related ==&lt;br /&gt;
* [https://www.atlassian.com/git/tutorials/  Git tutorials]&lt;br /&gt;
* [https://help.github.com/articles/changing-a-remote-s-url/ Switch https to ssh - remote url github]&lt;br /&gt;
* [https://gist.github.com/jexchan/2351996 Multiple SSH keys for github]&lt;br /&gt;
&lt;br /&gt;
== Docker related ==&lt;br /&gt;
* [https://docs.docker.com/ Docker official website]&lt;br /&gt;
* [http://2.bp.blogspot.com/-ZGXYBT4l9II/U5BFJwe_jWI/AAAAAAAAGB4/-Le5-NavlGg/s1600/docker-cycle.png Docker cycle]&lt;br /&gt;
* [https://www.wanadev.fr/tuto-debuter-et-comprendre-docker/ Understand how Docker works]&lt;br /&gt;
* [http://www.occitech.fr/blog/2014/10/tuto-docker-hello-world/ Docker tutorial - Hello world (understand basic commands)]&lt;br /&gt;
* [https://robinwinslow.uk/2014/08/27/fix-docker-networking/ Fix Docker&#039;s DNS issue with public network]&lt;br /&gt;
&lt;br /&gt;
== Meteor / MongoDB related ==&lt;br /&gt;
* [http://www.angular-meteor.com/ Angular Meteor official website]&lt;br /&gt;
* [https://www.mongodb.org/ MongoDB, the database used]&lt;br /&gt;
* [https://github.com/aldeed/meteor-collection2 Collection2 - A Meteor package that allows you to attach a schema to a Mongo.Collection]&lt;br /&gt;
* [https://github.com/laverdet/node-fibers#futures Asynchronous call in Meteor with fibers/future]&lt;br /&gt;
* [http://bootstrap-notify.remabledesigns.com/ Notification module used to display pretty notifications]&lt;/div&gt;</summary>
		<author><name>Alan.Damotte</name></author>
	</entry>
</feed>