Docker

De Lea Linux
Aller à la navigation Aller à la recherche

Docker

par Jiel

Maman, explique moi Docker ! Docker pour les débutants :-)

Présentation

Docker est un système de virtualisation par conteneur : il permet de mettre des applications et leur dépendance dans un endroit isolé, appelé conteneur (ou pourrait aussi parler de boîte ou de tiroir). C'est de la virtualisation poussée, dans le sens que le conteneur n'intègre pas de système d'exploitation, mais utilise au maximum les fonctionnalités du système d’exploitation sur lequel il tourne, tout en restant relativement autonome (le conteneur peut être déplacé d'un système à l'autre). Docker a l'avantage de faciliter la portabilité d’exécution d'une application, ainsi que son déploiement et son extensibilité - on peut facilement dupliquer un conteneur. Chaque conteneur possède ses propres processus système, accessibles seulement par lui-même et le système hôte.

Sûrement qu'avec un exemple ce sera plus clair. C'est parti :)

Préparation

Installez le paquet docker. Pour ce tutoriel, installez le paquet nodejs.

Créons une application web basique

Le but est de faire un petit serveur web qui va dire " Coucou" sur le port 8080. Ici l'exemple est en node.js, évidemment vous pouvez la faire en python avec nginx ou n'importe quoi qui vous plaît.

Créons un fichier serveur.js comme suit que l'on place dans un répertoire coucouapp/ :

var http = require('http');
var handleRequest = function(request, response) {
  response.writeHead(200);
  response.end("Coucou !");
}
var www = http.createServer(handleRequest);
www.listen(8080);

Maintenant, lancez le serveur :

node serveur.js

Si vous vous connectez sur http://localhost:8080/, vous devriez voir : "Coucou !".

Dockeriser l'application

Et maintenant, on va dockeriser l'application ci-dessus. Pour cela, il faut créer une image Docker, qui définit ce que contiendra le conteneur. Une image est un modèle, un patron, qui permet de créer des conteneurs. Dis autrement, un conteneur est l'instance d'une image. Bref, une image est définie dans un fichier appelé Dockerfile.

Dans le même répertoire coucouapp/, créez un fichier Dockerfile.

FROM node:4.4
EXPOSE 8080
COPY serveur.js .
CMD node serveur.js

Ce fichier utilise l'image LTS Node.js dans le registre de Docker (une bibliothèque qui contient plein d'images Docker de base, ce qui permet de ne pas réinventer la roue), ouvre le port 8080, copie le fichier serveur.js dans l'image (notez le . sur cette ligne) et lance le serveur (comme nous avons fait précédemment).

Premièrement, démarrons le service Docker, qui autorise votre distribution à dialoguer avec Docker.

sudo systemctl start docker

Sous RHEL / CentOS / Fedora, vous aurez peut-être aussi à autoriser votre utilisateur à utiliser docker :

sudo usermod -aG dockerroot $(whoami)

ainsi que rajouter OPTIONS='--selinux-enabled -G dockerroot' dans /etc/sysconfig/docker.


Maintenant, il faut construire l'image de son conteneur. Ici, on prendra le nom que l'on veut, mais certains hébergeurs imposent un nom.

docker build -t coucouapp .

Voilà, votre application est dockerisée/conteneurisée. Vous pouvez la téléverser sur un serveur (dans votre parc informatique, chez un hébergeur de cloud etc.).

Quelques commandes basiques

Hop, on teste :

docker run -d -p 8080:8080 coucouapp

Si vous vous connectez sur http://localhost:8080/, vous devriez voir : "Coucou !".

Pour voir les processus du conteneur :

docker ps

Pour arrêter le conteneur, on doit renseigner son ID :

docker stop 4r534sd3

Aller plus loin

Docker se développe chaque jour un peu plus. Pour orchestrer un grand nombre de conteneurs Docker, on se tournera vers les logiciels Kubernetes ou Mesos.



@ Retour à la rubrique Administration système

@ Retour à la rubrique Développement

Copyright

© 2016 Jiel Beaumadier

Tête de GNU Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale.