Difference between revisions of "EA2014 Docker"

From air
Jump to navigation Jump to search
Line 85: Line 85:
 
*faire un Hello Word avec ce docker
 
*faire un Hello Word avec ce docker
 
<pre>docker run learn/tutorial echo Hello Word</pre>
 
<pre>docker run learn/tutorial echo Hello Word</pre>
*installer l'application ping au sein de ce docker et l'executer
+
*installer l'application ping au sein de ce docker
 
<pre>docker run learn/tutorial apt-get install -y ping</pre>
 
<pre>docker run learn/tutorial apt-get install -y ping</pre>
 
*commiter cette modification du docker. Pour cela nous avons besoin de savoir dans quel conteneur a été fait cette modification. La commande suivante permet de récupérer l'id en question :
 
*commiter cette modification du docker. Pour cela nous avons besoin de savoir dans quel conteneur a été fait cette modification. La commande suivante permet de récupérer l'id en question :

Revision as of 12:22, 7 November 2014

logo du projet "Docker"

Présentation

  • Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2014)
  • Sujet : Conteneurs Linux
  • Date : 7 novembre 2014
  • Auteur : Augustin Husson <husson.augustin@gmail.com>
  • Lien vers les slides de la présentation : slides

Mots Clés

Conteneurs Linux, Docker, Zone Solaris, Virtualisation, Environnement d'application

Introduction

Les conteneurs : Principe

Nous connaissons tous plus ou moins bien le principe de la machine virtuelle. Notamment parce qu'elles nous permettent d'installer des OS facilement sans être obligé de faire des duals boot. De nombreux logiciels permettent cela comme VMware ou VirtualBox. Le principe de la machine virtuelle est de simuler une machine physique. Cela peut être utile par exemple pour tester des applications non stables. Mais simuler toute une machine physique pour finalement ne faire fonctionner/tester une application en particulier est particulière lourd. On aimerait donc quelques choses de plus léger, de plus flexible. C'est pourquoi nous allons parlé des Conteneurs.

Les conteneurs contrairement aux machines virtuelles ne simulent pas le matériel. Ils virtualisent un environnement d'application et ils permettent d'isoler les applications entre elle. Les images ci-dessous permettent de bien comprendre la différence décrite :

Principe des Conteneurs
Principe des machines virtuelles

On voit donc bien qu'il n'y a pas de couche de virtualisation dans les Conteneurs, c'est donc en ce sens qu'ils sont beaucoup plus léger que les machines virtuelles. Afin de regarder concrètement comment on peut mettre en oeuvre un conteneur, j'ai choisi de prendre comme exemple les Zones Solaris qui est la solution d'Oracle et Docker qui est une solution open source.

L'intérêt des conteneurs

Dans la présentation de ce qu'est un conteneur, on a dit qu'il permettait d'isoler les applications les une des autres. Cette idée d'isoler les applications entre elle est particulièrement utile dans les serveurs.

On peut ainsi installer diverse services dans un conteneur, une base de donnée dans un autre ...etc . Lors d'une migration de machine, il suffit alors de faire migrer les conteneurs vers la machine réceptrice. Cela assure ainsi une meilleure portabilité.

Cela permet également d'optimiser les coûts en terme de ressource matériel. IL y a en effet une ré allocation dynamique des ressources dans les systèmes de gestion des conteneurs. De cette façon les ressources peuvent être ré-allouées pour d'autres conteneurs.

La solution d'oracle : Les zones Solaris

La solution d'oracle pour mettre en oeuvre les conteneurs ne s'applique que sur son système d'exploitation Oracle Solaris qui est donc un système propriétaire.

Ici il existe deux types de conteneur : La zone globale et les zones non globales

Zone Globale

Tous les systèmes Solaris 10 et supérieur possèdent une zone globale. Elle a deux objectifs :

  • créer la couche d’interaction et d'abstraction avec l'OS
  • administrer les zones non globales. Il n'y a qu'à partir d'elle qu'on peut installer, modifier et désinstaller des zones non globales

Elle permet également d'alléger en terme de mémoire les zones non globales. En effet, ces dernières ont accès aux applications installées dans la zone globale. Il est alors juste nécessaire d'installer les applications spécifiques aux zones non globales.

Enfin seul la zone globale est démarrable à partir du hardware du serveur.

Zones non globales

C'est ici qu'on trouvera notre conteneur tel qu'on l'a décrit précédemment.

Docker : une référence dans le genre

Histoire

Docker est un projet open source possédant la licence Apache 2.0 . C'est un logiciel qui permet d'installer une application et ses dépendances dans un conteneur virtuel. L'application ainsi empaquetée pourra être lancé sur n'importe quelle machine possédant un noyau linux.

C'est un projet assez récent puisque la première version date du 13 mars 2013. Il est l'un des projets les plus visité et forké de GitHub.

Spécificité

Une des forces de Docker est que l'on peut facilement partager son propre docker avec n'importe qui du moment qu'il possède un noyau linux sur sa machine (que ce soit en natif que par machine virtuelle). Ceci est possible essentiellement grâce à deux points :

  • Le projet utilise le principe de git. C'est à dire qu'il met à la disposition des utilisateurs un hub afin que la communauté puisse partagée ses dockers. Il est ainsi possible de télécharger un docker
docker pull nom_du_docker

Après l'avoir modifié (en installant par exemple des fonctionnalités supplémentaires au sein de ce docker), vous avez la possibilité de le sauvegarder

docker commit id_Du_Conteneur nom_du_nouveau_docker

Et enfin de renvoyer votre version sur le serveur

docker push nom_du_docker
Principe de Docker Engine
  • Pour ceux qui ne souhaitent pas passer par un cloud, il est possible d'exporter son docker en tar.gz :
docker export id_du_docker > nginx.tgz


Le projet se veut être portable. C'est à dire qu'à l'égal de git, votre docker devrait fonctionner sur n'importe quelle machine. Dans ce but, un partenariat entre Docker et Microsoft a été mis en place pour créer un moteur Docker qui tournera, en natif, sur la prochaine édition de Windows Server.

Installation sur Ubuntu

Pour ça il suffit d'aller sur le site officiel de Docker et de suivre la procédure. Toutes les commandes son détaillées et très bien expliquées.

A la fin de la procédure d'installation, pour vérifier que Docker fonctionne il vous ai demandé de rentrer la commande suivante :

sudo docker run -i -t ubuntu /bin/bash

Si comme moi vous avez alors l'erreur suivante :

/etc/resolv.conf file or directory not found

Vous pouvez alors exécuter la commande suivante pour résoudre le problème (fonctionne sur Ubuntu 12.04):

sudo dpkg-reconfigure resolvconf

Démonstration

On reprend ici l'exemple présenté par Docker sur son site officiel. À savoir, on va :

  • télécharger une application appelée learn/tutorial
docker pull learn/tutorial
  • faire un Hello Word avec ce docker
docker run learn/tutorial echo Hello Word
  • installer l'application ping au sein de ce docker
docker run learn/tutorial apt-get install -y ping
  • commiter cette modification du docker. Pour cela nous avons besoin de savoir dans quel conteneur a été fait cette modification. La commande suivante permet de récupérer l'id en question :
docker ps -l

Une fois que l'id est récupéré on peut sauvegarder la modification

docker commit Id_Du_Conteneur_Ou_A_été_fait_l'installation_du_ping nom_image

Il est nécessaire de commiter vos modifications. Pour vous le prouvez vous pouvez tenter d’exécuter la commande ping dans avec l'image learn/tutorial. Vous devriez voir que cela ne fonctionne pas. Vous devez lancer la nouvelle image créée précédemment :

docker run new_image ping google.com

Vous pouvez voir que cette fois-ci la commande ping s’exécute bien.

Notes et Références

Docker

Zones Solaris