{"id":1284,"date":"2019-11-07T11:15:41","date_gmt":"2019-11-07T11:15:41","guid":{"rendered":"http:\/\/general.sio57.info\/wp\/?p=1284"},"modified":"2019-11-17T17:25:40","modified_gmt":"2019-11-17T17:25:40","slug":"docker-windows-1er-pas","status":"publish","type":"post","link":"https:\/\/general.sio57.info\/wp\/?p=1284","title":{"rendered":"Docker -Windows 1er pas"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Pourquoi&nbsp;?<\/h1>\n\n\n\n<div class=\"wp-block-media-text alignwide\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"479\" src=\"https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/vm-cont-1024x479.png\" alt=\"\" class=\"wp-image-1286\" srcset=\"https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/vm-cont-1024x479.png 1024w, https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/vm-cont-300x140.png 300w, https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/vm-cont-768x359.png 768w, https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/vm-cont.png 1360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<pre class=\"wp-block-verse\"> <\/pre>\n<\/div><\/div>\n\n\n\n<p class=\"has-drop-cap\"> Le probl\u00e8me des VM  est qu&rsquo;elles occupent plus d&rsquo;espace que n\u00e9cessaire.  Prenons l&rsquo;exemple d&rsquo;un serveur d&rsquo;application. Il contient l&rsquo;application  et un syst\u00e8me d&rsquo;exploitation d\u00e9di\u00e9. Ce dernier consomme de l&rsquo;espace de  stockage, de la m\u00e9moire, des cycles de CPU et d&rsquo;autres ressources  mat\u00e9rielles. ON ce retrouve vite avec des h\u00f4tes devant faire tourner un  grand nombre de VM, chacune d&rsquo;entre elles ex\u00e9cutant le m\u00eame syst\u00e8me  d&rsquo;exploitation. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>La technique des conteneurs vise \u00e0 r\u00e9soudre ce probl\u00e8me de volume en utilisant une instance unique du syst\u00e8me d&rsquo;exploitation, partag\u00e9e par tous les conteneurs. Un conteneur ressemble \u00e0 une application virtualis\u00e9e dans la mesure o\u00f9 il renferme les fichiers binaires et de configuration de l&rsquo;application, mais c\u00f4t\u00e9 syst\u00e8me d&rsquo;exploitation, il ne stocke que les composants modifi\u00e9s par l&rsquo;application, tels que les entr\u00e9es du registre ou les pilotes sp\u00e9cifiques dont elle a besoin.&nbsp;\u00bb<\/p>\n\n\n\n<p>(Mais aussi pour les d\u00e9veloppeurs =&gt; agile )<\/p>\n\n\n\n<p>Un <strong>conteneur<\/strong> permet d&rsquo;isoler chaque\nservice&nbsp;: le serveur web, la base de donn\u00e9es, une application peuvent \u00eatre\nex\u00e9cut\u00e9s de fa\u00e7on ind\u00e9pendante dans leur conteneur d\u00e9di\u00e9, contenant uniquement\nles d\u00e9pendances n\u00e9cessaires. Chaque conteneur est reli\u00e9 par des r\u00e9seaux\nvirtuels. Il est possible de monter des volumes de disque de la machine h\u00f4te\ndans un conteneur. <\/p>\n\n\n\n<p>Une <strong>image<\/strong> est un container \u201cstatique\u201c, c\u2019est \u00e0 dire qu\u2019on a pris\nune photo d\u2019un container \u00e0 un\ninstant T comprenant nos param\u00e9trages\npar d\u00e9faut ce qui nous permet de la dupliquer\n\u00e0 volont\u00e9.<\/p>\n\n\n\n<p>Les images\nDocker permettent aussi de r\u00e9aliser&nbsp;des&nbsp;sauvegardes de tout votre\nenvironnement. En cas de gros probl\u00e8me,&nbsp;vous\npourrez les restaurer. Le b\u00e9mol c\u2019est que les images peuvent \u00eatre tr\u00e8s lourdes, rendant la restauration un peu longue.<\/p>\n\n\n\n<p>Les <strong>Dockerfiles<\/strong>\nsont des fichiers qui permettent de construire une image Docker\nadapt\u00e9e aux&nbsp;besoins, \u00e9tape\npar \u00e9tape.<\/p>\n\n\n\n<p>Les\nDockerfiles&nbsp;prennent tr\u00e8s peu\nde place et peuvent se partager\/transmettre facilement. En\nm\u00eame temps, il est possible de&nbsp;recr\u00e9er\nson environnement rapidement. Mais aussi&nbsp;d\u2019effectuer des tests avec des librairies qui ont subi de nouvelles mises \u00e0 jour, pour v\u00e9rifier\nque le&nbsp;syst\u00e8me fonctionne toujours aussi bien avant de d\u00e9ployer ces mises \u00e0 jour en production.<\/p>\n\n\n\n<p>Un <strong>Docker compose <\/strong>est un fichier tr\u00e8s utilis\u00e9 qui permet de cr\u00e9er un multi-conteneur en d\u00e9finissant simplement la liste des conteneurs \u00e0 utiliser. Et c\u2019est tr\u00e8s pratique car on peut ainsi d\u00e9crire l\u2019ensemble de son environnement, constitu\u00e9 de plusieurs images ou Dockerfiles\u2026 faire le lien entre une base de donn\u00e9es et le site web <\/p>\n\n\n\n<p>Container Linux \/ Windows<\/p>\n\n\n\n<p>Sous Linux, il y a plein de tutos sur le net en fonction de la distribution. Ce sont des containers qui s\u2019ex\u00e9cutent sur l\u2019OS.<\/p>\n\n\n\n<p>Sous Windows il y a moins de litt\u00e9rature et il y a surtout 2 grands concepts.<\/p>\n\n\n\n<p>Les conteneurs Hyper-V : l&rsquo;OS partag\u00e9 par les conteneurs est celui d&rsquo;une VM. Sous Windows 10 et server 16. On switch entre une vm linux et une vm windows selon l&rsquo;OS \u00ab\u00a0p\u00e8re\u00a0\u00bb.  C&rsquo;est plus s\u00e9curis\u00e9 mais plus gourmand. <\/p>\n\n\n\n<p>Sous Windows serveur 16, on peut aussi  mettre en \u0153uvre directement  Conteneurs Windows Server .  Moins s\u00e9curis\u00e9s, ils  s\u2019ex\u00e9cutent directement au-dessus de Windows Server. Partagent le m\u00eame  OS, les connexions r\u00e9seau et le syst\u00e8me de fichiers que le conteneur  h\u00f4te. De ce fait ce ne peut etre que  des Containers Windows . Ils sont par contre  tr\u00e8s l\u00e9gers.  <\/p>\n\n\n\n<p>Les conteneurs sont un m\u00e9canisme d\u2019am\u00e9lioration de l\u2019efficacit\u00e9 gr\u00e2ce au partage des fichiers binaires du syst\u00e8me d&rsquo;exploitation. Cette approche am\u00e9liore non seulement la capacit\u00e9 de l&rsquo;h\u00f4te, mais facilite \u00e9galement la gestion des correctifs, car il y a moins de syst\u00e8mes d&rsquo;exploitation \u00e0 mettre \u00e0 jour.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Docker desktop<\/h1>\n\n\n\n<p>Une fois l&rsquo;installation du programme faite. On obtient une petite baleine                                                  &nbsp;dans la barre des taches.<\/p>\n\n\n\n<div class=\"wp-block-media-text alignwide\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"422\" height=\"523\" src=\"https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/docker.png\" alt=\"\" class=\"wp-image-1287\" srcset=\"https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/docker.png 422w, https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/docker-242x300.png 242w\" sizes=\"auto, (max-width: 422px) 100vw, 422px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"has-large-font-size\">La baleine<\/p>\n<\/div><\/div>\n\n\n\n<p>Les pr\u00e9f\u00e9rences permettent de g\u00e9rer le stockage, le r\u00e9seau etc.  Attention&nbsp;: Il faut switcher si l\u2019on veut des containers Windows ou des containers Linux <\/p>\n\n\n\n<p>Kitematic est un outil\npermettant de facilter la gestion de docker. Mais il faut beaucoup passer par &nbsp;Powershell.<\/p>\n\n\n\n<p>Les commandes docker\ncommencent par Docker \u2013 ouvrir une invite PS et taper <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Docker help&nbsp; <\/li><li>Docker ps &nbsp;permet de voir les containers en route<\/li><li>Docker run pour lancer un container<\/li><li>docker commit image image_modifie<\/li><li> docker inspect dem1_nginx  <\/li><li> docker stop demo_nginx <\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Volume <\/h2>\n\n\n\n<p>Quand on installe un service via docker il faut pouvoir \u00ab&nbsp;injecter&nbsp;\u00bb les fichiers de configuration.  Il faut partager un volume entre le container et l\u2019h\u00f4te.  <\/p>\n\n\n\n<p>Partager&nbsp;: dans les param\u00e8tres -settings de docker <\/p>\n\n\n\n<p>Aller dans partager.<\/p>\n\n\n\n<p>On acc\u00e9dera \u00e0 ce partage en \u00ablan\u00e7ant \u00bb un container avec l\u2019option v et le mappage hote&nbsp;:container<\/p>\n\n\n\n<p>v\n\/host_mnt\/e\/rep-local:\/usr\/local\/etc\/haproxy par exemple<\/p>\n\n\n\n<p>docker run &#8211;name hap -d\n-p8080:80 &#8211;link nginx-1 &#8211;link nginx-2 <strong>-v\n\/host_mnt\/e\/docker:\/usr\/local\/etc\/haproxy<\/strong> haproxy:alpine<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Exemple avec des containers Linux : <\/h1>\n\n\n\n<p>2 serveurs Web NGINX et un load balancer HAproxy <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Containers NGINX<\/h2>\n\n\n\n<p>Lancer son\ncontainer<\/p>\n\n\n\n<p>docker\nrun &#8211;name dem1_nginx -p 80 -d nginx<\/p>\n\n\n\n<p>Petite\nexplication rapide des options pass\u00e9es \u00e0 docker run :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&#8211;name permet de      donner un nom \u00e0 notre conteneur. Si on le fait pas nous m\u00eame, Docker en      g\u00e9n\u00e8rera un \u00e0 notre place (par ex. tender_bardeen) ;<\/li><li>-p 80 : on      indique \u00e0 Docker qu\u2019on souhaite que le port 80 du conteneur soit li\u00e9 \u00e0 un      de nos ports locaux, qu\u2019il aura choisi lui-m\u00eame ;<\/li><li>-d lance le  conteneur de mani\u00e8re d\u00e9tach\u00e9e (sans \u00e7a, notre terminal reste attach\u00e9, et   si on fait ctrl+c, on arr\u00eate le conteneur).<\/li><\/ul>\n\n\n\n<p><strong>Docker ps<\/strong> permet de voir le processus et surtout le port pour interroger notre site web <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"388\" src=\"https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/nginx.png\" alt=\"\" class=\"wp-image-1288\" srcset=\"https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/nginx.png 901w, https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/nginx-300x129.png 300w, https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/nginx-768x331.png 768w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><\/figure>\n\n\n\n<p>Pour aller dans les fichiers du container on peut passer par&nbsp;l\u2019exec depuis Kitematic: <\/p>\n\n\n\n<p>On peut aussi se connecter sur le conteneur \u00ab&nbsp;nom&nbsp;\u00bb\nactuellement actif avec la commande docker exec :<\/p>\n\n\n\n<p>docker exec -it nom-container\n\/bin\/sh<\/p>\n\n\n\n<p>On est alors dans le shell du container qu\u2019on manipule comme\nun Linux.<\/p>\n\n\n\n<p>Un petit apt-get install wim pour avoir un \u00e9diteur (on fera\nplus tard une image=dockfile avec le n\u00e9cessaire)<\/p>\n\n\n\n<p>Ensuite dans le r\u00e9pertoire \/usr\/share\/nginx\/ <\/p>\n\n\n\n<p>Modifier chaque fichier index.html -serveur 1 \/ serveur 2<\/p>\n\n\n\n<p>(il y a voir plus simple, plus script, mais on verra plus\ntard)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Haproxy<\/h2>\n\n\n\n<p>Ensuite pour installer un container Haproxy, &nbsp;il faut au pr\u00e9alable pr\u00e9parer le fichier de config  <\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/haproxy.txt\">haproxy<\/a><a href=\"https:\/\/general.sio57.info\/wp\/wp-content\/uploads\/2019\/11\/haproxy.txt\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>Puis enfin faite le lien entre les serveurs Web, le fichier de config et lancer le container<\/p>\n\n\n\n<p>docker run &#8211;name hapx1 -d -p8080:80 &#8211;link nginx-1 &#8211;link nginx-2 -v \/host_mnt\/e\/docker:\/usr\/local\/etc\/haproxy haproxy:alpine<\/p>\n\n\n\n<p>Apr\u00e8s un petit Docker ps<\/p>\n\n\n\n<p>(la suite plus tard)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pourquoi&nbsp;? Le probl\u00e8me des VM est qu&rsquo;elles occupent plus d&rsquo;espace que n\u00e9cessaire. Prenons l&rsquo;exemple d&rsquo;un serveur d&rsquo;application. Il contient l&rsquo;application et un syst\u00e8me d&rsquo;exploitation d\u00e9di\u00e9. Ce dernier consomme de l&rsquo;espace de stockage, de la m\u00e9moire, des cycles de CPU et d&rsquo;autres ressources mat\u00e9rielles. ON ce retrouve vite avec des h\u00f4tes devant faire tourner un grand [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71,83,40,99],"tags":[167,166,168],"class_list":["post-1284","post","type-post","status-publish","format-standard","hentry","category-7-application-supervision","category-utilisateurs","category-sisr4","category-virtualisation","tag-container","tag-docker","tag-windows16"],"_links":{"self":[{"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1284"}],"version-history":[{"count":5,"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1284\/revisions"}],"predecessor-version":[{"id":1332,"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1284\/revisions\/1332"}],"wp:attachment":[{"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/general.sio57.info\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}