Dans le milieu des projets informatiques, Docker est un mot qui revient avec insistance, mais de quoi s’agit-il exactement ? Est-ce une réelle évolution ? Ou juste un effet de buzz ? Est-ce que Docker va révolutionner notre manière de concevoir les applications ?
Docker, c’est quoi?
Docker est un logiciel open source, sous licence Apache 2.0, qui automatise le déploiement d’applications dans des conteneurs logiciels. En d’autres termes, il s’agit de virtualisation légère. Docker est à la fois analogue et très différent au système de machine virtuelle : il permet de pouvoir monter des environnements, mais sans l’intégration du système d’exploitation sur lequel les applications sont exécutées. Docker ne fonctionne pas avec des machines virtuelles, mais avec des containers. Ceux-ci font directement appel à l’OS de la machine hôte pour réaliser ses appels système. Le gros intérêt de Docker est de pouvoir mutualiser un ou plusieurs serveurs, offrant un plus gros potentiel en termes de ressources techniques (plus de puissance processeur, plus de mémoire vive, plus d’espace disque…)
Docker introduit donc le concept d’architecture de microservices. Il s’agit avant tout une unité fonctionnelle. “Il correspond à une fonctionnalité précise, logique et cohérente du système. Un microservice est donc autonome vis à vis de la fonctionnalité qu’il réalise. Il a son propre code, gère ses propres données et ne les partage pas – pas directement en tout cas – avec d’autres services“.
Docker apporte les avantages suivant :
- Un container est léger et donc très rapide à lancer, et ne pèse que quelques Mo
- Il accélère les déploiements car il très facile et rapide de pouvoir passer d’un environnement de recette à un environnement de production
- Il permet surtout de pouvoir gérer des applications distribuées, avec des systèmes de clustering, et de l’externalisation de base de données, ou de tout autre composant applicatif
- Les ressources sont mutualisés ce qui permet de pouvoir monter des environnements complexes et lourd sur un seul et unique serveur
Nuxeo dans Docker, ça donne quoi ?
Cas pratique : Faire son premier conteneur Docker avec Nuxeo
Il est possible de monter n’importe quel type d’application ou d’environnement avec Docker, à titre d’illustration, nous présentons une installation simple et très rudimentaire d’une installation de Nuxeo sur Docker. Nuxeo a très largement détaillé l’intégration de leur solution dans Docker via leur Blog Nuxeo Docker, mais l’idée est de partir d’une réflexion “from scratch”, en faisant comme si rien n’existait. Voici donc un mode opératoire possible pour installer Nuxeo dans Docker
1. Tout d’abord, nous partirons d’un environnement Linux, et plus précisément une Ubuntu 14.04 (trusty)
2. Installez Docker après avoir mis à jour votre système
[shell]
$ sudo apt-get update
$ sudo apt-get -y install docker.io
[/shell]
3. Faire un test hello-world :
[shell]
docker run hello
[/shell]
4. Une fois que l’installation, créer un répertoire de travail
[shell]
mkdir DockerWorkspace
cd DockerWorkspace
[/shell]
5. Créer un fichier “Dockerfile”. Ce fichier est important puisque c’est le fichier texte qui inclut une liste d’actions à exécuter pour construire une image. En terme de structuration, il y a un prédicat suivi d’une ligne de description ou d’instruction. Les principales directives des fichiers Dockerfiles :
- MAINTAINER : nom et courriel de mainteneur du conteneur?;
- FROM : image de base (Ubuntu, Debian)?;
- VOLUME : point de montage?;
- RUN : commande à exécuter pour installer le conteneur?;
- ENTRYPOINT : commande qui s’exécute au démarrage du conteneur (une seule sera exécutée)?;
- CMD : commande qui s’exécute au démarrage du conteneur?;
- ADD : copier un fichier du répertoire courant dans le système de fichiers du conteneur?;
- USER : utilisateur qui exécute les commandes dans le conteneur?;
- EXPOSE : port(s) à exposer à l’extérieur
Attention, il faut bien respecter la majuscule du “D” de Dockerfile
vi Dockerfile
6. Créer votre Docker file
6.1. Dans un premier temps, on indique l’OS à utiliser
[shell]
FROM ubuntu:trusty
[/shell]
6.2. On précise le propriétaire du container
[shell]
MAINTAINER Grégory Carlin <gregory.carlin@ineat-conseil.fr>
[/shell]
6.3. On liste l’ensemble des étapes de construction successive de la mise en place de Nuxeo. Attention, il faut bien préciser “-y” sur tous les apt-get install afin de ne pas afficher le prompt sur l’interface.
[shell]
RUN sudo apt-get update
RUN sudo apt-get install -y wget
RUN sudo apt-get install -y software-properties-common
RUN sudo wget -q -O- http://apt.nuxeo.org/nuxeo.key | sudo apt-key add –
RUN sudo add-apt-repository "deb http://apt.nuxeo.org/ trusty fasttracks"
RUN sudo apt-add-repository ppa:mc3man/trusty-media
RUN sudo add-apt-repository ppa:openjdk-r/ppa
RUN sudo apt-get update
RUN sudo apt-get install -y openjdk-8-jdk
RUN sudo apt-get install -y ffmpeg
RUN sudo apt-get install -y gstreamer0.10-ffmpeg
RUN sudo apt-get install -y apache2
RUN sudo apt-get install -y nuxeo
[/shell]
6.3. Enfin, on expose le port que l’on souhaite intercepté sur notre serveur physique
[shell]
EXPOSE 8080
[/shell]
7. Sauvegarder votre Dockerfile
8. Lancer la construction du container en vous placant dans le répertoire de travail contenant le Dockerfile. Il se peut que vous ayez des messages apparaissant en rouge : certains sont effectivement des erreurs à traiter, mais ils y a également des traitements tout à fait normaux (création de la database avec l’utilisateur nuxeo par exemple), qui ne nécessite aucune correction de votre part.
[shell]
docker build -t mynuxeo .
[/shell]
9. Votre container est monté, il ne vous reste plus qu’à l’utiliser. Le prompt change alors.
[shell]
docker run –rm -ti -p "8080:8080" mynuxeo /bin/bash
[/shell]
10. vous êtes maintenant dans votre container. Il vous suffit de lancer Nuxeo de manière classique :
[shell]
sudo service nuxeo start
[/shell]
11. Ouvrez votre navigateur à l’URL http:localhost:8080
Simple non ? Par la suite, nous présenterons des cas plus complexe d’utilisation de Docker. En effet, il serait intéressant de “clusteriser” la base de données sur des containers séparés, ou de simuler un accès via une application de type portail. To be continued…