{"id":75,"date":"2018-12-18T16:30:47","date_gmt":"2018-12-18T15:30:47","guid":{"rendered":"http:\/\/blog.nosland.com\/?p=75"},"modified":"2018-12-18T16:31:11","modified_gmt":"2018-12-18T15:31:11","slug":"docker","status":"publish","type":"post","link":"http:\/\/blog.nosland.com\/?p=75","title":{"rendered":"Docker"},"content":{"rendered":"\n<h3>1&nbsp;DOCKER<\/h3>\n\n\n\n<p>Docker est un logiciel libre (Licence Apache 2.0) \u00e0 mi-chemin entre la virtualisation applicative et l\u2019automatisation.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"http:\/\/cv.geniaut.fr\/Paris8\/wikiP8\/webdsi.univ-paris8.fr\/site\/Systeme\/Docker\/Images\/logo.png\" alt=\"PIC\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.docker.com\n<\/div><\/figure>\n\n\n\n<p>Docker permet de manipuler des conteneurs de logiciels.<\/p>\n\n\n\n<p>Il compl\u00e8te le conteneur Linux LXC en isolant les processus les uns des autres pour cr\u00e9er une virtualisation de haut niveau.<\/p>\n\n\n\n<p>Contrairement aux autres syst\u00e8mes de (para) virtualisation, Docker n\u2019embarque pas un syst\u00e8me d\u2019exploitation invit\u00e9 mais ne s\u2019occupe que de la partie haut niveau.<\/p>\n\n\n\n<p>Il utilise le noyau de l\u2019h\u00f4te et ne fait fonctionner que le strict n\u00e9cessaire sur les invit\u00e9s.<\/p>\n\n\n\n<p>Docker c\u2019est aussi un d\u00e9p\u00f4t d\u2019images \u00e0 partir duquel vous pouvez t\u00e9l\u00e9charger et partager des applications sans avoir \u00e0 r\u00e9inventer la roue.<\/p>\n\n\n\n<p>Le d\u00e9p\u00f4t est consultable \u00e0 l\u2019adresse&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/registry.hub.docker.com\n<\/div><\/figure>\n\n\n\n<p>Il est alors simplissime de t\u00e9l\u00e9charger et d\u2019utiliser&nbsp;:<\/p>\n\n\n\n<ul><li>Ubuntu<\/li><li>Nginx<\/li><li>Mysql<\/li><li>redis<\/li><li>&#8230;<\/li><\/ul>\n\n\n\n<h4>1.1&nbsp;DIFFERENCE VM \/ CONTENEUR<\/h4>\n\n\n\n<p>Une VM a pour but de proposer une couche d\u2019abstraction au-dessus d\u2019un syst\u00e8me physique, telle que peut proposer Virtualbox, Qemu, VMware&#8230;<\/p>\n\n\n\n<p>Ces machines virtuelles permettent de simuler une machine physique et donc de faire tourner une application de tr\u00e8s bas niveau \u00e0 savoir un OS (syst\u00e8me d\u2019op\u00e9ration) de son choix.<\/p>\n\n\n\n<p>Gr\u00e2ce \u00e0 cela, une machine physique sous un OS peut faire tourner plusieurs VM avec chacun son propre OS et son ensemble applicatif.<\/p>\n\n\n\n<p>Cette solution est relativement performante si elle repose sur des fonctions mat\u00e9rielles (architecture physique compatible et si possible avec instruction AMD-V, VT-d, VT-x&#8230;) car sinon il faut op\u00e9rer par \u00e9mulation (perte de pr\u00e8s de 50% des performances CPU lors d\u2019\u00e9mulation de x86 sur PowerPC).<\/p>\n\n\n\n<p>Les VM sont souvent consid\u00e9r\u00e9es comme s\u00e9curis\u00e9es car il n\u2019y a pas de communication direct entre VM et la machine host.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"http:\/\/cv.geniaut.fr\/Paris8\/wikiP8\/webdsi.univ-paris8.fr\/site\/Systeme\/Docker\/Images\/vm.jpg\" alt=\"PIC\"\/><\/figure>\n\n\n\n<p>Le container virtualise l\u2019environnement d\u2019ex\u00e9cution de l\u2019OS de la machine host (Linux ou BSD, il n\u2019existe pas \u00e0 ce jour de container sous Windows).<\/p>\n\n\n\n<p>Un container est un ensemble applicatif s\u2019ex\u00e9cutant au sein de l\u2019OS ma\u00eetre de mani\u00e8re virtuellement isol\u00e9 et contraint (jails, chroot **).<\/p>\n\n\n\n<p>Le container est tr\u00e8s performant et l\u00e9ger car il partage de nombreuses ressources avec l\u2019OS host (kernel, devices&#8230;).<\/p>\n\n\n\n<p>En revanche bien que s\u2019ex\u00e9cutant de mani\u00e8re isol\u00e9e, le container ne peut \u00eatre consid\u00e9r\u00e9 comme tr\u00e8s s\u00e9curis\u00e9 puisque partageant la stack d\u2019ex\u00e9cution avec l\u2019OS ma\u00eetre.<\/p>\n\n\n\n<p>Le container peut au choix d\u00e9marrer un OS complet ou bien simplement des applications.<\/p>\n\n\n\n<p>Docker a pour objectif de ne pas reproduire tout un OS dans un container mais simplement les applications\/services souhait\u00e9s.<\/p>\n\n\n\n<p>D\u2019autres outils utilisant des containers tel qu\u2019OpenStack ou Proxmox g\u00e8rent des containers pour virtualiser tout l\u2019OS.<\/p>\n\n\n\n<h4>1.2&nbsp;FONCTIONNEMENT<\/h4>\n\n\n\n<p>Docker est un gestionnaire\/administrateur de container bas\u00e9 sur un principe de template de container.<\/p>\n\n\n\n<p>La gestion de template de container est un atout majeur de Docker qui propose une riche vari\u00e9t\u00e9 de containers pr\u00e9-existants mais \u00e9galement gr\u00e2ce \u00e0 la personnalisation de containers.<\/p>\n\n\n\n<p>Docker utilise LXC qui est l\u2019impl\u00e9mentation de r\u00e9f\u00e9rence de containers dans Linux&nbsp;:<\/p>\n\n\n\n<ul><li>cgroup<\/li><li>apparmor \/ selinux<\/li><li>chroots<\/li><li>kernel namespaces<\/li><\/ul>\n\n\n\n<p>Docker propose des services pour facilement cr\u00e9er, \u00e9diter, publier, ex\u00e9cuter des containers.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"http:\/\/cv.geniaut.fr\/Paris8\/wikiP8\/webdsi.univ-paris8.fr\/site\/Systeme\/Docker\/Images\/fonctionnement.jpg\" alt=\"PIC\"\/><\/figure>\n\n\n\n<p>D\u2019autres fonctions avanc\u00e9es pour la gestion des containers &amp; inter-container sont \u00e9galement propos\u00e9es pour limiter les ressources (RAM, CPU, disques), d\u00e9finir des supports partag\u00e9s, des interfaces partag\u00e9es&#8230;<\/p>\n\n\n\n<h3>2&nbsp;INSTALLATION SUR DEBIAN 8+<\/h3>\n\n\n\n<p>Sur un Ubuntu 14.04, l\u2019installation est simple&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;\u2212\u2212no\u2212install\u2212recommends&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;apt\u2212transport\u2212https&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ca\u2212certificates&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;software\u2212properties\u2212common&nbsp;<br>#&nbsp;curl&nbsp;\u2212fsSL&nbsp;https:\/\/apt.dockerproject.org\/gpg&nbsp;|&nbsp;sudo&nbsp;apt\u2212key&nbsp;add&nbsp;\u2212&nbsp;<br>#&nbsp;add\u2212apt\u2212repository&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u00ab\u00a0deb&nbsp;https:\/\/apt.dockerproject.org\/repo\/&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debian\u2212$(lsb_release&nbsp;\u2212cs)&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main\u00a0\u00bb&nbsp;<br>#&nbsp;apt\u2212get&nbsp;update&nbsp;<br>#&nbsp;apt\u2212get&nbsp;\u2212y&nbsp;install&nbsp;docker\u2212engine&nbsp;<br>#&nbsp;service&nbsp;docker&nbsp;start<\/p>\n\n\n\n<p>On peut ensuite tester docker avec la commande&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;hello\u2212world<\/p>\n\n\n\n<h4>2.1&nbsp;ET DERRIERE UN PROXY&nbsp;?<\/h4>\n\n\n\n<p>De base, les commandes de t\u00e9l\u00e9chargement de paquets passent \u00e0 travers le proxy (dans \/etc\/apt\/apt.conf).<\/p>\n\n\n\n<p>Pour la commande curl pr\u00e9c\u00e9dente, il faut ajouter le param\u00e8tre \u2013proxy&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;curl&nbsp;\u2212fsSL&nbsp;\u2212\u2212proxy&nbsp;https:\/\/192.168.0.1:3128&nbsp;https:\/\/apt.dockerproject.org\/gpg&nbsp;|&nbsp;sudo&nbsp;apt\u2212key&nbsp;add&nbsp;\u2212<\/p>\n\n\n\n<p>Ensuite, pour autoriser docker \u00e0 t\u00e9l\u00e9charger des images, on va indiquer \u00e0 systemd de lancer docker avec des param\u00e8tres li\u00e9s \u00e0 l\u2019utilisation du proxy.<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;mkdir&nbsp;\/etc\/systemd\/system\/docker.service.d<\/p>\n\n\n\n<p>On cr\u00e9e ensuite le fichier&nbsp;:&nbsp;<br><strong>&nbsp;<em>\/etc\/systemd\/system\/docker.service.d\/http-proxy.conf :<\/em><\/strong><\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">[Service]&nbsp;<br>Environment=\u00a0\u00bbHTTP_PROXY=http:\/\/192.168.0.1:3128\/\u00a0\u00bb<\/p>\n\n\n\n<p>Puis on red\u00e9marre docker pour pouvoir t\u00e9l\u00e9charger des images&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;systemctl&nbsp;daemon\u2212reload&nbsp;<br>#&nbsp;systemctl&nbsp;show&nbsp;\u2212\u2212property&nbsp;Environment&nbsp;docker&nbsp;<br>Environment=HTTP_PROXY=http:\/\/192.168.0.1:3128\/&nbsp;<br>#&nbsp;systemctl&nbsp;restart&nbsp;docker&nbsp;<br>#&nbsp;docker&nbsp;run&nbsp;hello\u2212world<\/p>\n\n\n\n<h3>3&nbsp;IMAGES<\/h3>\n\n\n\n<h4>3.1&nbsp;CREER UNE IMAGE<\/h4>\n\n\n\n<p>Nous allons cr\u00e9er un conteneur from scratch \u00e0 partir de l\u2019image minimale d\u2019un OS Ubuntu LTS 14.04.<\/p>\n\n\n\n<h5>3.1.1&nbsp;VIA DEBOOTSTRAP<\/h5>\n\n\n\n<p>Nous utilisons l\u2019outil debootstrap pour g\u00e9n\u00e9rer cette image<strong><\/strong>sudo&nbsp;debootstrap&nbsp;\u2212\u2212include&nbsp;ubuntu\u2212minimal&nbsp;\u2212\u2212arch&nbsp;amd64&nbsp;trusty&nbsp;rootfs&nbsp;http:\/\/archive.ubuntu.com\/ubuntu<\/p>\n\n\n\n<p>On monte cette image dans un dossier sp\u00e9cifique (avec root)&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;tar&nbsp;\u2212C&nbsp;rootfs&nbsp;\u2212c&nbsp;.&nbsp;|&nbsp;docker&nbsp;import&nbsp;\u2212&nbsp;nph\/base<\/p>\n\n\n\n<p>On v\u00e9rifie ensuite que l\u2019image est bien pr\u00e9sente&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;images&nbsp;<br>REPOSITORY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGE&nbsp;ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CREATED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VIRTUAL&nbsp;SIZE&nbsp;<br>nph\/base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;latest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;91d2c1176b7c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;About&nbsp;a&nbsp;minute&nbsp;ago&nbsp;&nbsp;&nbsp;228.4&nbsp;MB<\/p>\n\n\n\n<p>Pour d\u00e9marrer l\u2019image, il suffit de lancer&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;\u2212i&nbsp;\u2212t&nbsp;91d2c1176b7c&nbsp;\/bin\/bash<\/p>\n\n\n\n<h5>3.1.2&nbsp;COMMIT<\/h5>\n\n\n\n<p>Le commit d\u2019une image correpond \u00e0 une copie \u201cversionn\u00e9e\u201d de cette image.<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;images&nbsp;<br>REPOSITORY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGE&nbsp;ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CREATED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VIRTUAL&nbsp;SIZE&nbsp;<br>nph\/base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;latest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;91d2c1176b7c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;51&nbsp;minutes&nbsp;ago&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;87.4&nbsp;MB&nbsp;<br>#&nbsp;docker&nbsp;commit&nbsp;91d2c1176b7c&nbsp;base:1.00&nbsp;<br>#&nbsp;docker&nbsp;images&nbsp;<br>REPOSITORY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGE&nbsp;ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CREATED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VIRTUAL&nbsp;SIZE&nbsp;<br>base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0a323ede50b4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;seconds&nbsp;ago&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;98.34&nbsp;MB&nbsp;<br>nph\/base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;latest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;91d2c1176b7c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;51&nbsp;minutes&nbsp;ago&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;87.4&nbsp;MB<\/p>\n\n\n\n<h4>3.2&nbsp;UTILISER UNE IMAGE DE BASE<\/h4>\n\n\n\n<h5>3.2.1&nbsp;CONTENEUR UBUNTU<\/h5>\n\n\n\n<p>Il faut commencer par rechercher les conteneurs disponibles&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;search&nbsp;ubuntu<\/p>\n\n\n\n<p>D\u00e9ployer une image du d\u00e9p\u00f4t Docker est simple&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;pull&nbsp;ubuntu<\/p>\n\n\n\n<p>Dans cet exemple, un syst\u00e8me Ubuntu minimal est t\u00e9l\u00e9charg\u00e9.<\/p>\n\n\n\n<p>Pour le lancer, il suffit de taper&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;\u2212i&nbsp;\u2212t&nbsp;ubuntu&nbsp;\/bin\/bash<\/p>\n\n\n\n<p>On se retrouve alors connect\u00e9 \u00e0 la machine Ubuntu en tant que root.<\/p>\n\n\n\n<p>A ce stade on peut faire ce qu\u2019on veut&nbsp;:<\/p>\n\n\n\n<ul><li>mettre \u00e0 jour<\/li><li>installer des paquets<\/li><li>configurer un serveur<\/li><li>&#8230;<\/li><\/ul>\n\n\n\n<h5>3.2.2&nbsp;CONTENEUR TOMCAT<\/h5>\n\n\n\n<p>A pr\u00e9sent, on va d\u00e9ployer un conteneur Tomcat d\u00e9ployable et utilisable sur le port 8080.<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;search&nbsp;tomcat&nbsp;<br>&#8230;&nbsp;<br>#&nbsp;docker&nbsp;pull&nbsp;consol\/tomcat\u22127.0&nbsp;<br>&#8230;&nbsp;<br>#&nbsp;docker&nbsp;images<\/p>\n\n\n\n<p>La derni\u00e8re commande permet de v\u00e9rifier le conteneur est bien disponible.<\/p>\n\n\n\n<p>Le lancement du conteneur tomcat se fait via la commande&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;\u2212p&nbsp;:8080&nbsp;consol\/tomcat7<\/p>\n\n\n\n<h4>3.3&nbsp;PERSONNALISER UNE IMAGE<\/h4>\n\n\n\n<p>Une image peut \u00eatre personnalis\u00e9e suivant 2 m\u00e9thodes&nbsp;:<\/p>\n\n\n\n<ol><li>en se connectant via ssh ou bash dans le container pour installer et \u00e9diter les configurations.&nbsp;<br>Ce mode bien que plus facile ne permet pas de capitaliser sur la \u201crecette\u201d et ne permet donc pas facilement une \u00e9dition en incr\u00e9mentale.<\/li><li>\u00e9dition d\u2019un fichier DockerFile contenant l\u2019ensemble des actions \u00e0 faire pour constituer le container (Cf. chapitre suivant)<\/li><\/ol>\n\n\n\n<h3>4&nbsp;AUTOMATISATION AVEC UN DOCKERFILE<\/h3>\n\n\n\n<p>Le dockerfile est un fichier texte qui inclut une liste d\u2019actions \u00e0 ex\u00e9cuter pour construire une image.<\/p>\n\n\n\n<p>Exemple de dockerfile Apache&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;Apache&nbsp;et&nbsp;PHP&nbsp;dans&nbsp;un&nbsp;container&nbsp;<br>#&nbsp;<br>#&nbsp;VERSION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.1&nbsp;<br>#&nbsp;<br><br>#&nbsp;Image&nbsp;de&nbsp;base&nbsp;<br>FROM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debian:wheezy&nbsp;<br><br>#&nbsp;Mainteneur&nbsp;du&nbsp;conteneur&nbsp;<br>MAINTAINER&nbsp;NosPHeratus\u00a0\u00bbnospheratus@nosland.com\u00a0\u00bb&nbsp;<br><br>ENV&nbsp;DEBIAN_FRONTEND&nbsp;noninteractive&nbsp;<br><br>#&nbsp;Depots,&nbsp;mises&nbsp;a&nbsp;jour&nbsp;et&nbsp;installs&nbsp;<br>RUN&nbsp;(apt\u2212get&nbsp;update&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;upgrade&nbsp;\u2212y&nbsp;\u2212q&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;dist\u2212upgrade&nbsp;\u2212y&nbsp;\u2212q&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;\u2212y&nbsp;\u2212q&nbsp;autoclean&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;\u2212y&nbsp;\u2212q&nbsp;autoremove)&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;\u2212q&nbsp;apache2&nbsp;libapache2\u2212mod\u2212php5&nbsp;php5&nbsp;supervisor&nbsp;<br>RUN&nbsp;rm&nbsp;\/var\/www\/index.html&nbsp;<br>ADD&nbsp;index.php&nbsp;\/var\/www\/index.php&nbsp;<br><br>#&nbsp;Config&nbsp;de&nbsp;Apache&nbsp;<br><br>ENV&nbsp;APACHE_RUN_USER&nbsp;www\u2212data&nbsp;<br>ENV&nbsp;APACHE_RUN_GROUP&nbsp;www\u2212data&nbsp;<br>ENV&nbsp;APACHE_LOG_DIR&nbsp;\/var\/log\/apache2&nbsp;<br><br>#&nbsp;Port&nbsp;a&nbsp;ouvrir&nbsp;a&nbsp;l\u2019exterieur&nbsp;<br>EXPOSE&nbsp;80&nbsp;<br><br>#&nbsp;Demarrage&nbsp;des&nbsp;services&nbsp;<br>RUN&nbsp;mkdir&nbsp;\u2212p&nbsp;\/var\/log\/supervisor&nbsp;<br>#&nbsp;Copie&nbsp;du&nbsp;fichier&nbsp;dans&nbsp;le&nbsp;fs&nbsp;du&nbsp;conteneur&nbsp;<br>ADD&nbsp;apache.conf&nbsp;\/etc\/supervisor\/conf.d\/apache.conf&nbsp;<br><br>#&nbsp;Commande&nbsp;a&nbsp;executer&nbsp;lors&nbsp;du&nbsp;demarrage&nbsp;du&nbsp;conteneur&nbsp;<br>CMD&nbsp;source&nbsp;\/etc\/apache2\/envvars&nbsp;&amp;&amp;&nbsp;exec&nbsp;\/usr\/sbin\/apache2&nbsp;\u2212DFOREGROUND<\/p>\n\n\n\n<p>Construire un conteneur&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;build&nbsp;\u2212t&nbsp;nom_du_conteneur&nbsp;.<\/p>\n\n\n\n<h3>5&nbsp;COMMANDES DE BASE<\/h3>\n\n\n\n<p>Voir les conteneurs qui tournent&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;ps&nbsp;<br>#&nbsp;docker&nbsp;ps&nbsp;\u2212a<\/p>\n\n\n\n<p>D\u00e9marrer une image<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;\u2212i&nbsp;\u2212t&nbsp;ubuntu&nbsp;\/bin\/bash<\/p>\n\n\n\n<p>Supprimer un conteneur \/ supprimer tous les conteneurs&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;rm&nbsp;id_du_conteneur&nbsp;<br>#&nbsp;docker&nbsp;rm&nbsp;\u2018docker&nbsp;ps&nbsp;\u2212a&nbsp;\u2212q\u2018<\/p>\n\n\n\n<p>Supprimer une images&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;rmi&nbsp;id_ou_nom_de_l_image<\/p>\n\n\n\n<p>Exporter\/Importer un container en tar.gz&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;export&nbsp;id_ou_nom_de_l_image&nbsp;&gt;&nbsp;nginx.tgz&nbsp;<br>#&nbsp;cat&nbsp;nginx.tgz&nbsp;|&nbsp;docker&nbsp;import&nbsp;\u2212&nbsp;nginx<\/p>\n\n\n\n<p>Arr\u00eater un ou plusieurs conteneurs&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;stop&nbsp;$(docker&nbsp;ps&nbsp;\u2212a&nbsp;\u2212q)&nbsp;<br>#&nbsp;docker&nbsp;stop&nbsp;id_ou_nom_de_l_image<\/p>\n\n\n\n<p>Supprimer un conteneur&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;rm&nbsp;id_ou_nom_de_l_image<\/p>\n\n\n\n<p>Enregistrer l\u2019\u00e9tat d\u2019un conteneur (commit)&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;commit&nbsp;&lt;container_id&gt;&nbsp;&lt;some_name&gt;&nbsp;<br>#&nbsp;docker&nbsp;images<\/p>\n\n\n\n<p>Afficher les infos d\u2019une image&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;inspect&nbsp;id_ou_nom_de_l_image<\/p>\n\n\n\n<h3>6&nbsp;CONTENEURS PERSONNALISES<\/h3>\n\n\n\n<p>Dans le cadre des laboratoires, nous avons cr\u00e9\u00e9 plusieurs conteneurs d\u00e9di\u00e9s.<\/p>\n\n\n\n<p>Nous pr\u00e9sentons ici quelques images.<\/p>\n\n\n\n<h4>6.1&nbsp;JDK7<\/h4>\n\n\n\n<p>Utilisateurs inconditionnels de Java (&nbsp;:, nous cr\u00e9ons une image Java \u00e0 partir de la distribution 14.04 d\u2019Ubuntu.&nbsp;<br><strong>&nbsp;<\/strong>Dockerfile :<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;Image&nbsp;de&nbsp;base&nbsp;<br>FROM&nbsp;ubuntu:14.04&nbsp;<br><br>#&nbsp;Mainteneur&nbsp;<br>MAINTAINER&nbsp;NosPheratus &lt;&nbsp;nospheratus@nosland.com&gt;&nbsp;<br><br>#&nbsp;On&nbsp;met&nbsp;la&nbsp;liste&nbsp;des&nbsp;a&nbsp;jour&nbsp;et&nbsp;on&nbsp;installe&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;update&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;\u2212y&nbsp;install&nbsp;python\u2212software\u2212properties&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;software\u2212properties\u2212common&nbsp;<br>RUN&nbsp;add\u2212apt\u2212repository&nbsp;ppa:webupd8team\/java&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;update&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;\u2212y&nbsp;upgrade&nbsp;<br><br>#&nbsp;On&nbsp;accepte&nbsp;automatiquement&nbsp;la&nbsp;licence&nbsp;oracle&nbsp;<br>RUN&nbsp;echo&nbsp;oracle\u2212java7\u2212installer&nbsp;shared\/accepted\u2212oracle\u2212license\u2212v1\u22121&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;true&nbsp;|&nbsp;\/usr\/bin\/debconf\u2212set\u2212selections&nbsp;<br>#&nbsp;Installation&nbsp;java&nbsp;7&nbsp;oracle&nbsp;jdk&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;\u2212y&nbsp;install&nbsp;oracle\u2212java7\u2212installer&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;clean&nbsp;<br>RUN&nbsp;update\u2212alternatives&nbsp;\u2212\u2212display&nbsp;java&nbsp;<br>RUN&nbsp;echo&nbsp;\u00ab\u00a0JAVA_HOME=\/usr\/lib\/jvm\/java\u22127\u2212oracle\u00a0\u00bb&nbsp;&gt;&gt;&nbsp;\/etc\/environment&nbsp;<br><br>#&nbsp;Nettoyage&nbsp;<br>RUN&nbsp;rm&nbsp;\u2212rf&nbsp;\/var\/lib\/apt\/lists\/\u2217&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;clean<\/p>\n\n\n\n<p>Ce fichier plac\u00e9 dans un dossier sp\u00e9cifique, la cr\u00e9ation du contenur se fait via la commande&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;build&nbsp;\u2212t&nbsp;\u00ab\u00a0nph\/jdk7\u00a0\u00bb&nbsp;.<\/p>\n\n\n\n<p>On peut ensuite ex\u00e9cuter le conteneur, le distribuer&#8230;<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;\u2212i&nbsp;\u2212t nph\/jdk7&nbsp;\/bin\/bash&nbsp;<br>#&nbsp;docker&nbsp;ps&nbsp;\u2212a&nbsp;<br>#&nbsp;docker&nbsp;export&nbsp;88514bc5947c&nbsp;&gt;&nbsp;jdk7.tgz<\/p>\n\n\n\n<p>Cette image fait 719 Mo<\/p>\n\n\n\n<h4>6.2&nbsp;TOMCAT7<\/h4>\n\n\n\n<p>Nous nous basons sur l\u2019image JDK7 pour ajouter un serveur Tomcat 7.<\/p>\n\n\n\n<p>Nous ajoutons un serveur SSH pour acc\u00e9der au conteneur qui sera lanc\u00e9 en background.<\/p>\n\n\n\n<p>Le service supervisor lancera SSH et Tomcat automatiquement lors du d\u00e9marrage.<\/p>\n\n\n\n<p>Nous utilisons le fichier d\u2019autorisation ci-dessous pour acc\u00e9der au manager d\u2019applications&nbsp;:&nbsp;<br><strong>&nbsp;<\/strong>tomcat-users.xml :&nbsp;<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">&lt;?xml&nbsp;version=\u20191.0\u2019&nbsp;encoding=\u2019utf\u22128\u2019?&gt;&nbsp;<br>&lt;tomcat\u2212users&gt;&nbsp;<br>&nbsp;&nbsp;&lt;role&nbsp;rolename=\u00a0\u00bbmanager\u2212gui\u00a0\u00bb\/&gt;&nbsp;<br>&nbsp;&nbsp;&lt;user&nbsp;username=\u00a0\u00bbadmin\u00a0\u00bb&nbsp;password=\u00a0\u00bbadmin\u00a0\u00bb&nbsp;roles=\u00a0\u00bbmanager\u2212gui\u00a0\u00bb\/&gt;&nbsp;<br>&lt;\/tomcat\u2212users&gt;<\/p>\n\n\n\n<p>On utilise le d\u00e9mon supervisor pour d\u00e9marrer le serveur tomcat&nbsp;:&nbsp;<br>tomcat.conf :<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">[supervisord]&nbsp;<br>nodaemon=true&nbsp;<br><br>[program:tomcat]&nbsp;<br>command=\/bin\/bash&nbsp;\u2212c&nbsp;\u00ab\u00a0env&nbsp;&gt;&nbsp;\/tmp\/tomcat.env&nbsp;&amp;&amp;&nbsp;cat&nbsp;\/etc\/default\/tomcat7&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;\/tmp\/tomcat.env&nbsp;&amp;&amp;&nbsp;mv&nbsp;\/tmp\/tomcat.env&nbsp;\/etc\/default\/tomcat7&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;service&nbsp;tomcat7&nbsp;start\u00a0\u00bb&nbsp;<br>redirect_stderr=true<\/p>\n\n\n\n<p>&#8230; et le serveur SSH&nbsp;<br>ssh.conf :<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">[program:sshd]&nbsp;<br>command=\/usr\/sbin\/sshd&nbsp;\u2212D<\/p>\n\n\n\n<p>Ces trois fichiers sont plac\u00e9s dans le m\u00eame dossier que le dockerfile ci-dessous&nbsp;:&nbsp;<br><strong>:<\/strong>Dockerfile<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;Image&nbsp;de&nbsp;base&nbsp;<br>FROM nph\/jdk7&nbsp;<br><br>#&nbsp;Mainteneur&nbsp;<br>MAINTAINER&nbsp;NosPHeratus &lt;&nbsp;nospheratus@nosland.com&gt;&nbsp;<br><br>#&nbsp;On&nbsp;cree&nbsp;l\u2019utilisateur&nbsp;nph<br>RUN&nbsp;useradd nph \u2212m&nbsp;\u2212d&nbsp;\/home\/nph \u2212s&nbsp;\/bin\/bash&nbsp;<br>RUN&nbsp;adduser&nbsp;nph sudo&nbsp;<br>RUN&nbsp;echo&nbsp;nph:nph |&nbsp;chpasswd&nbsp;<br><br>#&nbsp;On&nbsp;installe&nbsp;Tomcat&nbsp;7&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;\u2212y&nbsp;install&nbsp;tomcat7&nbsp;tomcat7\u2212admin&nbsp;<br>RUN&nbsp;echo&nbsp;\u00ab\u00a0JAVA_HOME=\/usr\/lib\/jvm\/java\u22127\u2212oracle\u00a0\u00bb&nbsp;&gt;&gt;&nbsp;\/etc\/default\/tomcat7&nbsp;<br>RUN&nbsp;cp&nbsp;\u2212Rf&nbsp;\/usr\/share\/tomcat7\u2212admin\/manager&nbsp;\/var\/lib\/tomcat7\/webapps\/&nbsp;<br>RUN&nbsp;cp&nbsp;\u2212Rf&nbsp;\/usr\/share\/tomcat7\u2212admin\/host\u2212manager&nbsp;\/var\/lib\/tomcat7\/webapps\/&nbsp;<br>COPY&nbsp;tomcat\u2212users.xml&nbsp;\/etc\/tomcat7\/tomcat\u2212users.xml&nbsp;<br>COPY&nbsp;tomcat.conf&nbsp;\/etc\/supervisor\/conf.d\/tomcat.conf&nbsp;<br><br>#&nbsp;On&nbsp;installe&nbsp;SSH&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;update&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;openssh\u2212server&nbsp;<br>RUN&nbsp;mkdir&nbsp;\/var\/run\/sshd&nbsp;<br>RUN&nbsp;sed&nbsp;\u2212i&nbsp;\u2019s\/PermitRootLogin&nbsp;without\u2212password\/PermitRootLogin&nbsp;no\/\u2019&nbsp;\\&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/etc\/ssh\/sshd_config&nbsp;<br><br>#&nbsp;On&nbsp;installe&nbsp;supervisor&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;\u2212y&nbsp;install&nbsp;supervisor&nbsp;<br>RUN&nbsp;mkdir&nbsp;\u2212p&nbsp;\/var\/log\/supervisor&nbsp;<br>COPY&nbsp;tomcat.conf&nbsp;\/etc\/supervisor\/conf.d\/tomcat.conf&nbsp;<br>COPY&nbsp;ssh.conf&nbsp;\/etc\/supervisor\/conf.d\/ssh.conf&nbsp;<br><br>#&nbsp;On&nbsp;ouvre&nbsp;les&nbsp;ports&nbsp;<br>EXPOSE&nbsp;8080&nbsp;22&nbsp;<br><br>#&nbsp;On&nbsp;corrige&nbsp;les&nbsp;dependances&nbsp;diverses&nbsp;(pb&nbsp;tomcat\u2212java)&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;update&nbsp;\u2212\u2212fix\u2212missing&nbsp;<br><br>#&nbsp;Nettoyage&nbsp;<br>RUN&nbsp;rm&nbsp;\u2212rf&nbsp;\/var\/lib\/apt\/lists\/\u2217&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;clean&nbsp;<br><br>#&nbsp;On&nbsp;demarre&nbsp;supervisor&nbsp;automatiquement&nbsp;<br>CMD&nbsp;[\u00ab\u00a0supervisord\u00a0\u00bb,&nbsp;\u00ab\u00a0\u2212n\u00a0\u00bb]<\/p>\n\n\n\n<p>Ce fichier plac\u00e9 dans un dossier sp\u00e9cifique, la cr\u00e9ation du contenur se fait via la commande&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;build&nbsp;\u2212t&nbsp;\u00ab\u00a0nph\/tomcat7\u00a0\u00bb&nbsp;.<\/p>\n\n\n\n<p>On peut ensuite ex\u00e9cuter le conteneur et acc\u00e9der aux ports 8090 (tomcat, utilisateur admin\/admin) et 2022 (SSH) de sa machine via l\u2019utilisateur nph\/nph.<\/p>\n\n\n\n<p>Par d\u00e9faut, l\u2019image doit se lancer en mode background (1ere ligne).<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;\u2212d&nbsp;\u2212p&nbsp;8090:8080&nbsp;\u2212p&nbsp;2022:22&nbsp;nph\/tomcat7&nbsp;<br>#&nbsp;docker&nbsp;run&nbsp;\u2212i&nbsp;\u2212t&nbsp;nph\/tomcat7&nbsp;\/bin\/bash&nbsp;<br>#&nbsp;docker&nbsp;ps&nbsp;<br>#&nbsp;docker&nbsp;export&nbsp;88514bc5947c&nbsp;&gt;&nbsp;tomcat7.tgz<\/p>\n\n\n\n<p>Cette image fait 704 Mo.<\/p>\n\n\n\n<p>On peut visualiser le manager d\u2019applications l\u00e0&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttp:\/\/localhost:8090\/manager\/\n<\/div><\/figure>\n\n\n\n<p>&#8230; ou se connecter en SSH avec l\u2019utilisateur root\/root.<\/p>\n\n\n\n<h4>6.3&nbsp;MYSQL<\/h4>\n\n\n\n<p>Mysql dispose d\u2019un repository officiel&nbsp;:&nbsp;<a href=\"https:\/\/hub.docker.com\/_\/mysql\/\">https:\/\/hub.docker.com\/_\/mysql\/<\/a>&nbsp;et il est tout \u00e0 fait possible d\u2019utiliser les images disponibles.<\/p>\n\n\n\n<p>N\u00e9anmoins&#8230; nos habitudes de travail autour de la virtualisation nous font pr\u00e9f\u00e9rer cr\u00e9er notre propre image mysql, qui s\u2019apparentra davantage \u00e0 une machine virtuelle classique.<\/p>\n\n\n\n<p>On pr\u00e9voit donc de disposer d\u2019un service ssh pour se connecter sur l\u2019image, ainsi que le serveur mysql&nbsp;\ud83d\ude42<\/p>\n\n\n\n<h5>6.3.1&nbsp;CREATION DE L\u2019IMAGE<\/h5>\n\n\n\n<p>Nous cr\u00e9ons un mot de passe pour l\u2019utilisateur root de mysql, ainsi qu\u2019une base de travail (nph) et l\u2019utilisateur ad\u00e9quat.<\/p>\n\n\n\n<p>On utilise le d\u00e9mon supervisor pour d\u00e9marrer le serveur mysql&nbsp;:&nbsp;<br>mysql.conf :<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">[supervisord]&nbsp;<br>nodaemon=true&nbsp;<br><br>[program:mysql]&nbsp;<br>command=\/bin\/bash&nbsp;\u2212c&nbsp;\u00ab\u00a0\/opt\/startup_mysql.sh\u00a0\u00bb&nbsp;<br>redirect_stderr=true<\/p>\n\n\n\n<p>&#8230; et le serveur SSH&nbsp;<br><strong>&nbsp;<\/strong>ssh.conf :&nbsp;<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">[program:sshd]&nbsp;<br>command=\/usr\/sbin\/sshd&nbsp;\u2212D<\/p>\n\n\n\n<p>Comme d\u2019habitude, nous utilisons la distribution Ubuntu.<\/p>\n\n\n\n<p>Le kernel de la version 14.04 posant probl\u00e8me lors des tests, nous utilisons la version 14.04&nbsp;<br><strong>:&nbsp;<\/strong>DockerfileFROM&nbsp;ubuntu:14.04&nbsp;<\/p>\n\n\n\n<p>#&nbsp;Mainteneur&nbsp;<br>MAINTAINER&nbsp;NosPHeratus &lt;&nbsp;nospheratus@nosland.com&gt;&nbsp;<br><br>ENV&nbsp;DEBIAN_FRONTEND&nbsp;noninteractive&nbsp;<br><br>#&nbsp;On&nbsp;met&nbsp;a&nbsp;jour&nbsp;les&nbsp;paquets&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;update&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;sudo&nbsp;apt\u2212utils&nbsp;<br><br>#&nbsp;On&nbsp;cree&nbsp;l\u2019utilisateur&nbsp;nph<br>RUN&nbsp;useradd&nbsp;nph \u2212m&nbsp;\u2212d&nbsp;\/home\/nph \u2212s&nbsp;\/bin\/bash&nbsp;<br>RUN&nbsp;adduser&nbsp;nph sudo&nbsp;<br>RUN&nbsp;echo&nbsp;nph:nph|&nbsp;chpasswd&nbsp;<br><br>#&nbsp;On&nbsp;installe&nbsp;SSH&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;update&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;openssh\u2212server&nbsp;<br>RUN&nbsp;mkdir&nbsp;\/var\/run\/sshd&nbsp;<br>RUN&nbsp;sed&nbsp;\u2212i&nbsp;\u2019s\/PermitRootLogin&nbsp;without\u2212password\/PermitRootLogin&nbsp;no\/\u2019&nbsp;\/etc\/ssh\/sshd_config&nbsp;<br><br>#&nbsp;Installation&nbsp;de&nbsp;mysql&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;mysql\u2212server&nbsp;<br>RUN&nbsp;sed&nbsp;\u2212i&nbsp;\u2212e&nbsp;\u00ab\u00a0s\/^bind\u2212address\\s\u2217=\\s\u2217127.0.0.1\/bind\u2212address&nbsp;=&nbsp;0.0.0.0\/\u00a0\u00bb&nbsp;\/etc\/mysql\/my.cnf&nbsp;<br>RUN&nbsp;rm&nbsp;\u2212Rf&nbsp;\/var\/lib\/mysql\/\u2217&nbsp;<br>ADD&nbsp;.\/startup_mysql.sh&nbsp;\/opt\/startup_mysql.sh&nbsp;<br>RUN&nbsp;chmod&nbsp;755&nbsp;\/opt\/startup_mysql.sh&nbsp;<br><br>#&nbsp;On&nbsp;installe&nbsp;supervisor&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;supervisor&nbsp;<br>RUN&nbsp;mkdir&nbsp;\u2212p&nbsp;\/var\/log\/supervisor&nbsp;<br>COPY&nbsp;mysql.conf&nbsp;\/etc\/supervisor\/conf.d\/mysql.conf&nbsp;<br>COPY&nbsp;ssh.conf&nbsp;\/etc\/supervisor\/conf.d\/ssh.conf&nbsp;<br><br>#&nbsp;Nettoyage&nbsp;<br>RUN&nbsp;rm&nbsp;\u2212rf&nbsp;\/var\/lib\/apt\/lists\/\u2217&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;clean&nbsp;<br><br>#&nbsp;On&nbsp;ouvre&nbsp;les&nbsp;ports&nbsp;<br>EXPOSE&nbsp;3306&nbsp;22&nbsp;<br><br>#&nbsp;On&nbsp;demarre&nbsp;supervisor&nbsp;automatiquement&nbsp;<br>CMD&nbsp;[\u00ab\u00a0supervisord\u00a0\u00bb,&nbsp;\u00ab\u00a0\u2212n\u00a0\u00bb]<\/p>\n\n\n\n<p>On utilise le fichier startup.sh pour d\u00e9marrer le service&nbsp;:&nbsp;<br>startup_mysql.sh :&nbsp;<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#!\/bin\/bash&nbsp;<br><br>if&nbsp;[&nbsp;!&nbsp;\u2212f&nbsp;\/var\/lib\/mysql\/ibdata1&nbsp;];&nbsp;then&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;mysql_install_db&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;\/usr\/bin\/mysqld_safe&nbsp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;10s&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Base&nbsp;nph<br>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;\u00ab\u00a0create&nbsp;database&nbsp;portail;\u00a0\u00bb&nbsp;|&nbsp;mysql&nbsp;\u2212u&nbsp;root&nbsp;mysql&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Utilisateur&nbsp;nph<br>&nbsp;&nbsp;&nbsp;&nbsp;MYSQL_USER=nph<br>&nbsp;&nbsp;&nbsp;&nbsp;PASS=nph<br>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;\u00ab\u00a0CREATE&nbsp;USER&nbsp;\u2019${MYSQL_USER}\u2019@\u2019%\u2019&nbsp;IDENTIFIED&nbsp;BY&nbsp;\u2019$PASS\u2019\u00a0\u00bb&nbsp;|&nbsp;mysql&nbsp;\u2212u&nbsp;root&nbsp;mysql&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;\u00ab\u00a0GRANT&nbsp;ALL&nbsp;PRIVILEGES&nbsp;ON&nbsp;portail.\u2217&nbsp;TO&nbsp;\u2019${MYSQL_USER}\u2019@\u2019%\u2019&nbsp;WITH&nbsp;GRANT&nbsp;OPTION\u00a0\u00bb&nbsp;|&nbsp;mysql&nbsp;\u2212u&nbsp;root&nbsp;mysql&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Utilisateur&nbsp;root&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;\u00ab\u00a0GRANT&nbsp;ALL&nbsp;ON&nbsp;\u2217.\u2217&nbsp;TO&nbsp;root@\u2019%\u2019&nbsp;IDENTIFIED&nbsp;BY&nbsp;\u2019root\u2019&nbsp;WITH&nbsp;GRANT&nbsp;OPTION;&nbsp;FLUSH&nbsp;PRIVILEGES\u00a0\u00bb&nbsp;|&nbsp;mysql&nbsp;\u2212u&nbsp;root&nbsp;mysq&nbsp;<br>l&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;\u00ab\u00a0UPDATE&nbsp;user&nbsp;SET&nbsp;password=PASSWORD(\u2019root\u2019)&nbsp;WHERE&nbsp;user=\u2019root\u2019;\u00a0\u00bb&nbsp;|&nbsp;mysql&nbsp;\u2212u&nbsp;root&nbsp;mysql&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;killall&nbsp;mysqld&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;10s&nbsp;<br>fi&nbsp;<br><br>\/usr\/bin\/mysqld_safe<\/p>\n\n\n\n<p>Ce fichier plac\u00e9 dans un dossier sp\u00e9cifique, la cr\u00e9ation du contenur se fait via la commande&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;build&nbsp;\u2212t&nbsp;\u00ab\u00a0nph\/mysql\u00a0\u00bb&nbsp;.<\/p>\n\n\n\n<p>On peut ensuite ex\u00e9cuter le conteneur et acc\u00e9der aux ports 3306 (mysql) et 2022 (SSH) de sa machine.<\/p>\n\n\n\n<p>Par d\u00e9faut, l\u2019image doit se lancer en mode background (1ere ligne).<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;\u2212d&nbsp;\u2212p&nbsp;3306:3306&nbsp;\u2212p&nbsp;2022:22&nbsp;nph\/mysql&nbsp;<br>#&nbsp;docker&nbsp;run&nbsp;\u2212i&nbsp;\u2212t&nbsp;nph\/mysql&nbsp;\/bin\/bash&nbsp;<br>#&nbsp;docker&nbsp;ps&nbsp;<br>#&nbsp;docker&nbsp;export&nbsp;8376201b28f6&nbsp;&gt;&nbsp;nph\u2212mysql.tgz<\/p>\n\n\n\n<p>Cette image fait 391 Mo.<\/p>\n\n\n\n<p>On peut ensuite ex\u00e9cutuer des requ\u00eates SQL (via mysql-client) ou se connecter en SSH avec l\u2019utilisateur nph\/nph (l\u2019utilisateur root \u00e9tant d\u00e9sactiv\u00e9).<\/p>\n\n\n\n<h5>6.3.2&nbsp;HUB<\/h5>\n\n\n\n<p>Cette image est publi\u00e9e sur le Hub Docker&nbsp;:&nbsp;<a href=\"https:\/\/hub.docker.com\/\">https:\/\/hub.docker.com<\/a><\/p>\n\n\n\n<p>ce qui permet de la d\u00e9ployer facilement via&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;pull&nbsp;nph\/mysql<\/p>\n\n\n\n<p>Disposant d\u2019un compte sur le Hub, l\u2019envoi d\u2019une image est simple&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;push&nbsp;nph\/mysql<\/p>\n\n\n\n<h4>6.4&nbsp;LDAP<\/h4>\n\n\n\n<p>Pour cette image, nous souhaitons disposer d\u2019une serveur LDAP directement fonctionnel.<\/p>\n\n\n\n<p>On pr\u00e9voit \u00e9galement un service ssh pour se connecter sur l\u2019image.<\/p>\n\n\n\n<h5>6.4.1&nbsp;CREATION DE L\u2019IMAGE<\/h5>\n\n\n\n<p>Nous utilisons le service slapd (openldap) avec le suffix&nbsp;: dc=nosland,dc=com.<\/p>\n\n\n\n<p>Pour cette image, la configuration est classique (via slapd.conf).<\/p>\n\n\n\n<p>Nous utilisons toutes les classes d\u2019objets du projet Etamine.<\/p>\n\n\n\n<p>Nous d\u00e9clarons l\u2019administrateur&nbsp;:<\/p>\n\n\n\n<ul><li>DN&nbsp;: cn=admin,dc=nosland,dc=com<\/li><li>mot de passe&nbsp;: admin<\/li><\/ul>\n\n\n\n<p>Nous cr\u00e9ons un utilisateur&nbsp;:<\/p>\n\n\n\n<ul><li>DN&nbsp;: uid=nospheratus,ou=people,dc=nosland,dc=com<\/li><li>mot de passe&nbsp;: NPH<\/li><\/ul>\n\n\n\n<p>On utilise le d\u00e9mon supervisor pour d\u00e9marrer le serveur slapd&nbsp;:&nbsp;<br>ldap.conf :&nbsp;<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">[supervisord]&nbsp;<br>nodaemon=true&nbsp;<br><br>[program:ldap]&nbsp;<br>command=\/bin\/bash&nbsp;\u2212c&nbsp;\u00ab\u00a0\/opt\/startup_ldap.sh\u00a0\u00bb&nbsp;<br>redirect_stderr=true<\/p>\n\n\n\n<p>&#8230; et le serveur SSH&nbsp;<br><strong>&nbsp;<\/strong>ssh.conf :&nbsp;<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">[program:sshd]&nbsp;<br>command=\/usr\/sbin\/sshd&nbsp;\u2212D<\/p>\n\n\n\n<p>Comme d\u2019habitude, nous utilisons la distribution Ubuntu.<\/p>\n\n\n\n<p>Nous utilisons la version 14.04&nbsp;<br>DockerfileFROM&nbsp;ubuntu:14.04 :<\/p>\n\n\n\n<p>#&nbsp;Mainteneur&nbsp;<br>MAINTAINER&nbsp;NosPHeratus &lt;&nbsp;nospheratus@nosland.com&gt;&nbsp;<br><br>ENV&nbsp;DEBIAN_FRONTEND&nbsp;noninteractive&nbsp;<br><br>#&nbsp;On&nbsp;cree&nbsp;l\u2019utilisateur&nbsp;nph<br>RUN&nbsp;apt\u2212get&nbsp;update&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;sudo&nbsp;apt\u2212utils&nbsp;<br>RUN&nbsp;useradd&nbsp;nph \u2212m&nbsp;\u2212d&nbsp;\/home\/nph \u2212s&nbsp;\/bin\/bash&nbsp;<br>RUN&nbsp;adduser&nbsp;nph sudo&nbsp;<br>RUN&nbsp;echo&nbsp;nph:nph |&nbsp;chpasswd&nbsp;<br><br>#&nbsp;On&nbsp;installe&nbsp;SSH&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;update&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;openssh\u2212server&nbsp;<br>RUN&nbsp;mkdir&nbsp;\/var\/run\/sshd&nbsp;<br>RUN&nbsp;sed&nbsp;\u2212i&nbsp;\u2019s\/PermitRootLogin&nbsp;without\u2212password\/PermitRootLogin&nbsp;no\/\u2019&nbsp;\/etc\/ssh\/sshd_config&nbsp;<br><br>#&nbsp;Installation&nbsp;de&nbsp;slapd&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;slapd&nbsp;ldap\u2212utils&nbsp;<br>RUN&nbsp;rm&nbsp;\u2212Rf&nbsp;\/var\/lib\/ldap&nbsp;\/etc\/ldap\/slapd.d&nbsp;<br>COPY&nbsp;.\/autofs.schema&nbsp;\/etc\/ldap\/schema\/autofs.schema&nbsp;<br>COPY&nbsp;.\/core.schema&nbsp;\/etc\/ldap\/schema\/core.schema&nbsp;<br>COPY&nbsp;.\/dhcp.schema&nbsp;\/etc\/ldap\/schema\/dhcp.schema&nbsp;<br>COPY&nbsp;.\/dns.schema&nbsp;\/etc\/ldap\/schema\/dns.schema&nbsp;<br>COPY&nbsp;.\/dyngroup.schema&nbsp;\/etc\/ldap\/schema\/dyngroup.schema&nbsp;<br>COPY&nbsp;.\/qmail.schema&nbsp;\/etc\/ldap\/schema\/qmail.schema&nbsp;<br>COPY&nbsp;.\/radius.schema&nbsp;\/etc\/ldap\/schema\/radius.schema&nbsp;<br>COPY&nbsp;.\/samba.schema&nbsp;\/etc\/ldap\/schema\/samba.schema&nbsp;<br>COPY&nbsp;.\/supann.schema&nbsp;\/etc\/ldap\/schema\/supann.schema&nbsp;<br>COPY&nbsp;.\/nosland.schema&nbsp;\/etc\/ldap\/schema\/nosland.schema&nbsp;<br>COPY&nbsp;.\/slapd.conf&nbsp;\/etc\/ldap\/slapd.conf&nbsp;<br>COPY&nbsp;.\/base.ldif&nbsp;\/opt\/base.ldif&nbsp;<br>COPY&nbsp;.\/startup_slapd.sh&nbsp;\/opt\/startup_slapd.sh&nbsp;<br>RUN&nbsp;chmod&nbsp;755&nbsp;\/opt\/startup_slapd.sh&nbsp;<br><br>#&nbsp;On&nbsp;installe&nbsp;supervisor&nbsp;<br>RUN&nbsp;apt\u2212get&nbsp;install&nbsp;\u2212y&nbsp;supervisor&nbsp;<br>RUN&nbsp;mkdir&nbsp;\u2212p&nbsp;\/var\/log\/supervisor&nbsp;<br>COPY&nbsp;ldap.conf&nbsp;\/etc\/supervisor\/conf.d\/ldap.conf&nbsp;<br>COPY&nbsp;ssh.conf&nbsp;\/etc\/supervisor\/conf.d\/ssh.conf&nbsp;<br><br>#&nbsp;Nettoyage&nbsp;<br>RUN&nbsp;rm&nbsp;\u2212rf&nbsp;\/var\/lib\/apt\/lists\/\u2217&nbsp;&amp;&amp;&nbsp;apt\u2212get&nbsp;clean&nbsp;<br><br>#&nbsp;On&nbsp;ouvre&nbsp;les&nbsp;ports&nbsp;<br>EXPOSE&nbsp;389&nbsp;636&nbsp;22&nbsp;<br><br>#&nbsp;On&nbsp;demarre&nbsp;supervisor&nbsp;automatiquement&nbsp;<br>CMD&nbsp;[\u00ab\u00a0supervisord\u00a0\u00bb,&nbsp;\u00ab\u00a0\u2212n\u00a0\u00bb]<\/p>\n\n\n\n<p>On utilise le fichier startup.sh pour d\u00e9marrer le service&nbsp;:&nbsp;<br>startup_ldap.sh :&nbsp;<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#!\/bin\/bash&nbsp;<br><br>if&nbsp;[&nbsp;!&nbsp;\u2212f&nbsp;\/var\/lib\/ldap&nbsp;];&nbsp;then&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;mkdir&nbsp;\/var\/lib\/ldap&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;slapadd&nbsp;&lt;&nbsp;\/opt\/base.ldif&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;chown&nbsp;\u2212Rf&nbsp;openldap:&nbsp;\/var\/lib\/ldap&nbsp;<br>fi&nbsp;<br><br>\/etc\/init.d\/slapd&nbsp;start<\/p>\n\n\n\n<p>Ce fichier plac\u00e9 dans un dossier sp\u00e9cifique, la cr\u00e9ation du contenur se fait via la commande&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;build&nbsp;\u2212t&nbsp;\u00ab\u00a0nph\/ldap\u00a0\u00bb&nbsp;.<\/p>\n\n\n\n<p>On peut ensuite ex\u00e9cuter le conteneur et acc\u00e9der aux ports 389 (ldap) et 2022 (SSH) de sa machine.<\/p>\n\n\n\n<p>Par d\u00e9faut, l\u2019image doit se lancer en mode background (1ere ligne).<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;run&nbsp;\u2212d&nbsp;\u2212p&nbsp;389:389&nbsp;\u2212p&nbsp;2022:22&nbsp;nph\/ldap&nbsp;<br>#&nbsp;docker&nbsp;run&nbsp;\u2212i&nbsp;\u2212t&nbsp;nph\/ldap&nbsp;\/bin\/bash&nbsp;<br>#&nbsp;docker&nbsp;ps&nbsp;<br>#&nbsp;docker&nbsp;export&nbsp;ec7288a3f430&nbsp;&gt;&nbsp;nph\u2212ldap.tgz<\/p>\n\n\n\n<p>Cette image fait 301 Mo.<\/p>\n\n\n\n<p>On peut ensuite ex\u00e9cutuer des requ\u00eates LDAP sur localhost (via Directory Studio par exemple) ou se connecter en SSH avec l\u2019utilisateur nph\/nph (l\u2019utilisateur root \u00e9tant d\u00e9sactiv\u00e9).<\/p>\n\n\n\n<h5>6.4.2&nbsp;HUB<\/h5>\n\n\n\n<p>Cette image est publi\u00e9e sur le Hub Docker&nbsp;:&nbsp;<a href=\"https:\/\/hub.docker.com\/\">https:\/\/hub.docker.com<\/a><\/p>\n\n\n\n<p>ce qui permet de la d\u00e9ployer facilement via&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;pull&nbsp;nph\/ldap<\/p>\n\n\n\n<p>Disposant d\u2019un compte sur le Hub, l\u2019envoi d\u2019une image est simple&nbsp;:<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-very-dark-gray-background-color\">#&nbsp;docker&nbsp;push nph\/ldap<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1&nbsp;DOCKER Docker est un logiciel libre (Licence Apache 2.0) \u00e0 mi-chemin entre la virtualisation applicative et l\u2019automatisation. Docker permet de&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.nosland.com\/index.php?rest_route=\/wp\/v2\/posts\/75"}],"collection":[{"href":"http:\/\/blog.nosland.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.nosland.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.nosland.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.nosland.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=75"}],"version-history":[{"count":2,"href":"http:\/\/blog.nosland.com\/index.php?rest_route=\/wp\/v2\/posts\/75\/revisions"}],"predecessor-version":[{"id":77,"href":"http:\/\/blog.nosland.com\/index.php?rest_route=\/wp\/v2\/posts\/75\/revisions\/77"}],"wp:attachment":[{"href":"http:\/\/blog.nosland.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=75"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.nosland.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=75"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.nosland.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}