www

My personal website(s)
Log | Files | Refs

index.html (18387B)


      1 <!DOCTYPE html>
      2 
      3 <html lang="fr">
      4   
      5   <head>
      6     <meta charset="utf-8">
      7     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
      8 
      9     <link rel="start" href="https://vincent.demeester.fr" />
     10 
     11     <title>Vincent Demeester</title>
     12     <link rel="canonical" href="https://vincent.demeester.fr/posts/2014-10-27-docker-1.3-ecosystem/">
     13     <link href="https://vincent.demeester.fr/index.xml" rel="alternate" type="application/rss+xml" title="Vincent Demeester" />
     14 
     15     <link rel="openid.server" href="https://indieauth.com/openid" />
     16     <link rel="openid.delegate" href="http://vincent.demeester.fr/" />
     17     <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
     18 
     19     <link rel="stylesheet" href="/css/screen.css" type="text/css" />
     20     <link rel="stylesheet" href="/css/sbrain.css" type="text/css" />
     21     <link rel="stylesheet" href="/css/syntax.css" type="text/css" />
     22 
     23   </head>
     24   
     25   <body lang="fr"/>
     26   
     27 
     28 
     29 
     30 
     31 
     32 <div id="main-container">
     33   <div id="page">
     34     <article class="post">
     35       <header>
     36         <h1 class="emphnext">Docker 1.3 et son écosystème</h1><a href='https://vincent.demeester.fr/posts/2014-10-27-docker-1.3-ecosystem/'></a>
     37         <address class="signature">
     38           <span class="date">Mon, 27 October, 2014</span>
     39           <span class="words">(1700 Words)</span>
     40         </address>
     41 	<ul class="tag_box inline">
     42 	  
     43 	  <li class="category"><a href="/categories/#zenika">zenika</a></li>
     44 	  
     45 	  
     46 	  
     47 	  
     48 	  
     49 	  <li class="tag tag-docker"><a href="/tags/#docker">docker<span>3</span></a></li>
     50 	  
     51 	  
     52 	  <li class="tag tag-fig"><a href="/tags/#fig">fig<span>1</span></a></li>
     53 	  
     54 	  
     55 	  <li class="tag tag-hub"><a href="/tags/#hub">hub<span>1</span></a></li>
     56 	  
     57 	  
     58 	  <li class="tag tag-boot2docker"><a href="/tags/#boot2docker">boot2docker<span>1</span></a></li>
     59 	  
     60 	  
     61 	  <li class="tag tag-container"><a href="/tags/#container">container<span>1</span></a></li>
     62 	  
     63 	  <br/>
     64 	  
     65 	</ul>
     66       </header>
     67       
     68       
     69       
     70       
     71 <div class="notice">Cet article est disponible sur le <a href="http://blog.zenika.com/">Blog de Zenika</a> à l'adresse suivante : <a href="http://blog.zenika.com/index.php?post/2014/10/27/Docker-1-3-et-son-ecosysteme">http://blog.zenika.com/index.php?post/2014/10/27/Docker-1-3-et-son-ecosysteme</a>. Cet publication me sert de mirroir / sauvegarde.</div>
     72 
     73 <p>Le <strong>16 octobre dernier</strong>, <ins>Docker est passé en version 1.3</ins>. C'est une
     74 bonne occasion de faire un point sur ce qu'apportent les mises à jour
     75 qui sont sorties depuis la 1.0. Nous allons également en profiter pour
     76 regarder les news <strong>importantes</strong> de l'écosystème Docker.</p>
     77 
     78 
     79 <p><img src="/public/Billet_0511/docker_container_engine_logo.png" alt="Docker" title="Docker" /></p>
     80 
     81 
     82 <p>Rappel très rapide, <strong>Docker est une plate-forme ouverte à destination des développeurs et administrateurs systèmes visant à faciliter la construction et le déploiement d'applications distribuées</strong>. De manière
     83 moins marketing, l'idée derrière Docker est d'<strong>automatiser</strong> le <strong>déploiement</strong> d'environnements sous forme de <strong>conteneurs légers</strong>, portables et auto-suffisants&nbsp;; les conteneurs permettant d'isoler
     84 l'exécution des applications dans des contextes d'exécution. Pour ce
     85 faire, Docker, écris en <a href="http://golang.org/">Go</a>, reprend les bases de <strong>LXC</strong>, utilise les fonctionnalités
     86 du <strong>noyau Linux</strong> (CGroups, Namespaces, …) et se base <em>initialement</em> sur un
     87 système de fichier "en oignons" AUFS&nbsp;; D'autres backend sont supportés
     88 également comme BTRFS ou <em>devicemapper</em> (LVM).</p>
     89 
     90 
     91 <p>Depuis le 9 juin 2014 et la release de la version 1.0 "production-read", l'équipe derrière Docker n'a pas chomé et 3
     92 nouvelles mises à jour sont sorties depuis&nbsp;; à savoir que les
     93 <em>releases</em> de Docker se font à un rythme pré-défini, "à-la" Linux,
     94 tout ce qui est prêt et testé est intégré à la release qui
     95 suit. Voyons, de façon non-exhaustive, quelles sont les princiales
     96 améliorations apportées par ces différentes versions.</p>
     97 
     98 <h4>Hub&nbsp;: Images officielles et language stack</h4>
     99 
    100 
    101 <p>Le <strong>Hub</strong>, tel qu'il a été nommé après la sortie de Docker 1.0 est <strong>un dépôt des images Docker</strong> de tout-un-chacun qui souhaite les partager.</p>
    102 
    103 
    104 <p>Au début de l'été, Docker Inc. a annoncé l'apparition des <strong>dépots officiels</strong>. L'idée est d'estampiller des images Docker comme officielles,
    105 c'est à dire vérifiées et garanties comme étant issues et supportées par
    106 les mainteneurs des projets. De nombreuses images officielles existent
    107 déjà pour les principaux projets open-source, comme Ubuntu, MongoDB,
    108 etc. Toute communauté open-source ou même tout éditeur logiciel peut
    109 entrer en contact avec l'équipe Docker pour voir son/ses images
    110 estampillées "officielles", après validation. Cette étiquette vient se
    111 rajouter à l'étiquette "<em>automated build repository</em>", précédement
    112 appelée <em>verified</em> (ce qui prétait à confusion) qui donne la garantie
    113 à l'utilisateur que l'image a été construite de manière automatique
    114 par l'infrastructure de Docker Inc. Il est également à noter que la version
    115 1.3.0 de Docker apporte la vérification de la provenance et de
    116 l'intégrité des images officielles via signature électronique&nbsp;; même si
    117 pour l'instant c'est en <em>work-in-progress</em>.</p>
    118 
    119 
    120 <p>Un autre ajout récent au Docker Hub, datant de fin septembre, vaut le
    121 détour&nbsp;: les l<strong>anguage stack</strong>, des images de bases <em>pre-construites</em> avec tous les outils nécessaires pour faire tourner une application dans un langage donné. Un développeur souhaitant rapidement construire
    122 un conteneur avec, par exemple, une application Clojure, n'a plus
    123 besoin de <em>réinventer la roue</em> (i.e. partir d'une image de base, installer
    124 le JDK, installer lein, etc.). Il lui suffit de partir d'une des
    125 <em>language stack</em>, ici clojure.</p>
    126 
    127 <pre class="bash code bash" style="font-family:inherit">FROM clojure
    128 COPY . <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>app
    129 WORKDIR <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>app
    130 CMD <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #ff0000;">&quot;lein&quot;</span>, <span style="color: #ff0000;">&quot;run&quot;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span></pre>
    131 
    132 
    133 <h4>Restart policies (1.2.0)</h4>
    134 
    135 
    136 <p>Docker 1.2 a apporté une option en plus à la commande <code>run</code>&nbsp;:
    137 <code>--restart</code>. Il permet de définir une <strong>politique de redémarrage</strong> dans
    138 le cas où le conteneurs viendrait à mourrir, que ce soit de manière
    139 normale (code de retour à 0) ou inattendue (<em>failure</em>, code de retour
    140 différent de 0). Trois options sont disponibles pour l'instant&nbsp;:</p>
    141 
    142 <ul>
    143 <li><strong>no</strong>&nbsp;: pas de redémarrage, fonctionnement par défaut.</li>
    144 <li><strong>on-failure</strong>: redémarrage automatique si le conteneur s'est terminé de façon anormale. Il est possible d'ajouter un nombre maximum de redémarrage&nbsp;; avec <code>--restart=on-failure:3</code> docker essaiera de redémarrer 3 fois avant d'abandonner.</li>
    145 <li><strong>always</strong>&nbsp;: redémarrage automatique, tout le temps, erreurs ou pas.</li>
    146 </ul>
    147 
    148 <h4>Injection de processus (1.3.0)</h4>
    149 
    150 
    151 <p>La possibilité de voir ce qui se passe dans le container, et par
    152 conséquent de s'en servir pour debugger, s'est averé longtemps
    153 complexe. Dans les <em>premiers jours</em> de Docker, l'installation d'un
    154 démon ssh était une solution commune. Cependant, celà complexifiait la
    155 création d'un conteneur&nbsp;; en effet, Docker est fait pour lancer et isoler
    156 une seule commande, l'ajout d'un démon sshd imposait alors de mettre
    157 en place une solution du type <em>init</em> comme supervisord, runit, ou
    158 autres. Un article de Jérôme Petazonni, employé Docker Inc,
    159 a mis les choses au point&nbsp;:
    160 <strong><a href="http://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/">If you run SSHD in your Docker containers, you're doing it wrong!</a></strong>,
    161 littéralement "<em>Si vous faites tourner SSHD dans vos container Docker, vous vous trompez</em>". Jérôme avait créé à l'époque un outil,
    162 <a href="https://github.com/jpetazzo/nsenter">nsenter</a>, qui était (et est toujours) installable en passant par un container, histoire de montrer
    163 un peu de magie.</p>
    164 
    165 
    166 <p>La version 1.3 de Docker intègre un nouvelle commande, <code>exec</code> qui
    167 n'est autre que nsenter, en mieux, directement intégré à Docker, plus
    168 besoin de passer par un outil externe. <strong>Il devient donc possible d'executer n'importe quelle process à l'intérieur donc container, qui est en cours d'exécution</strong>. Ainsi un simple <code>docker exec -it ubuntu_bash bash</code> et
    169 nous voici dans une session bash à l'intérieur du conteneur. Bien
    170 entendu, comme pour nsenter, cela ne change pas l'idée derrière Docker
    171 qui est "une application par conteneur"&nbsp;; la commande <code>exec</code> est
    172 surtout présente pour répondre à des problématiques de <em>debug</em> et de
    173 <em>developpement</em>.</p>
    174 
    175 
    176 <h4>Cycle de vie d’un container (1.3.0)</h4>
    177 
    178 
    179 <p>Une autre nouvelle commande arrive avec la version 1.3.0 de Docker,
    180 c'est <code>create</code>. Beaucoup d'utilisateur ont demandé d'être capable
    181 de séparer la création initiale de conteneur et son lancement&nbsp;;
    182 auparavant il n'existait que la commande <code>run</code> qui faisait les deux
    183 d'un coup.</p>
    184 
    185 <pre class="bash code bash" style="font-family:inherit">$ docker create <span style="color: #660033;">-t</span> <span style="color: #660033;">-i</span> fedora <span style="color: #c20cb9; font-weight: bold;">bash</span>
    186 6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752
    187 $ docker start <span style="color: #660033;">-a</span> <span style="color: #660033;">-i</span> 6d8af538ec5
    188 bash-<span style="color: #000000;">4.2</span><span style="color: #666666; font-style: italic;">#</span></pre>
    189 
    190 
    191 <h4>Options de sécurité (1.3.0)</h4>
    192 
    193 
    194 <p>Les utilisateurs de SELinux ou AppArmor vont être content, la commande
    195 <code>--security-opt</code>, arrivée avec la version 1.3.0, permet les <em>labels</em>
    196 et <em>profiles</em> de ces derniers, ce qui donne quelque chose comme&nbsp;:</p>
    197 
    198 <pre class="bash code bash" style="font-family:inherit">docker run <span style="color: #660033;">--security-opt</span> label:<span style="color: #7a0874; font-weight: bold;">type</span>:svirt_apache <span style="color: #660033;">-i</span> <span style="color: #660033;">-t</span> centos <span style="color: #c20cb9; font-weight: bold;">bash</span></pre>
    199 
    200 
    201 <p>L'avantage principal de cette nouvelle commande, c'est, sur
    202 les systèmes qui sont configurés avec SELinux ou AppArmor, de pouvoir
    203 donner des privilèges de manière plus fine qu'avec l'option
    204 <code>--privileged</code> (qui donne tout) et ainsi diminuer les risques
    205 potentiels.</p>
    206 
    207 
    208 <h4>Boot2docker</h4>
    209 
    210 
    211 <p>Docker s'appuyant sur des fonctionnalitées de noyau Linux, son usage
    212 est <em>limité</em> à un système hôte avec un noyau Linux. Le projet
    213 boot2docker vise à enlever cette barrière en <strong>permettant d'avoir la commande docker sous Mac OS X et Windows</strong>. Il s'agit ni plus ni moins
    214 d'une machine virtuelle VirtualBox légère, basée sur la distribution
    215 Tiny Core Linux, pour avoir un <em>overhead</em> le plus faible possible.
    216 L'utilisation de boot2docker n'est pas encore totalement transparente,
    217 principalement pour la gestion des ports ou encore du montage des
    218 volumes du Host (OS X ou Windows) dans le conteneur Docker. La version
    219 1.3 de docker, et la version correspondante de boot2docker, permettent
    220 maintenant aux utiliseurs de Mac OS X de monter leur dossier <em>hôtes</em>
    221 dans le conteneur.</p>
    222 
    223 
    224 <h4>Fig 1.0</h4>
    225 
    226 
    227 <p><a href="http://www.fig.sh/">Fig</a> est un outil de développement basé sur Docker, écrit en Python. L'idée est de
    228 définir son environnement via un fichier YAML, que ce soit pour le
    229 code sur lequel nous travaillons mais également les services externes
    230 desquels notre application dépend (Base de données, ''Message
    231 queue'', etc.).</p>
    232 
    233 
    234 <p>Nous avons donc, par exemple, un <code>Dockerfile</code>&nbsp;:</p>
    235 
    236 <pre class="bash code bash" style="font-family:inherit">FROM clojure:lein-2.5.0
    237 ADD . <span style="color: #000000; font-weight: bold;">/</span>code
    238 WORKDIR <span style="color: #000000; font-weight: bold;">/</span>code
    239 RUN lein run</pre>
    240 
    241 
    242 
    243 <p>Et un <code>fig.yml</code>&nbsp;:</p>
    244 
    245 <pre>[yaml]
    246 web:
    247   build: .
    248   command: lein run
    249   links:
    250    - db
    251   ports:
    252    - &quot;8000:8000&quot;
    253 db:
    254   image: postgres
    255 </pre>
    256 
    257 
    258 <p>Enfin un petit <code>fig up</code> et c'est gagné, nous obtenons notre base de données
    259 relationnelle qui tourne, notre appli qui a été construite et qui
    260 tourne aussi, et qui est lié à notre conteneur db. Il existe bien d'autres
    261 commandes (<code>start</code>, <code>stop</code>, <code>destroy</code>, etc.).</p>
    262 
    263 
    264 <p>Fig était initialement développé par <a href="https://www.orchardup.com/">Orchard</a>, qui a été acquis cette
    265 année par Docker Inc. Ce 17 octobre, l'équipe Docker a donc fait un release 1.0 de
    266 Fig en ajoutant le support à docker 1.3 et à boot2docker. Un certain nombre de commandes et de
    267 nouvelles fonctionnalitées ont étés ajoutées, notament&nbsp;:</p>
    268 
    269 <ul>
    270 <li><code>fig port</code>, qui liste les ports par service,</li>
    271 <li><code>fig pull</code>, qui récupère la dernière version d'un service,</li>
    272 <li><code>fig restart</code>, qui redémarre les conteneurs (<code>stop</code> et <code>start</code>)</li>
    273 <li>le support de <code>.dockerignore</code></li>
    274 <li>le support de connection en TLS au daemon Docker</li>
    275 <li>et pas mal d'autres options.</li>
    276 </ul>
    277 
    278 <p>Mais l'annonce principale accompagnant cette version est que <strong>Fig ne recevra plus de mise à jour majeure à partir de cette version 1.0</strong>
    279 puisque l'équipe Docker travaille pour <strong>intégrer les fonctionnalités</strong>
    280 que Fig apporte, <strong>directement dans Docker</strong>&nbsp;; ce qui est une
    281 excellente nouvelle.</p>
    282 
    283 
    284 <h4>Partenariat avec Microsoft</h4>
    285 
    286 
    287 <p>Cela transpirait ces derniers mois, dans les différentes conférences
    288 et meetups, Microsoft s'intéressait de très prêt à Docker. C'est
    289 maintenant officiel, <strong>Docker Inc et Microsoft sont partenaires</strong>. Le
    290 partenariat couvre pour l'instant les sujets suivants&nbsp;:</p>
    291 
    292 <ul>
    293 <li>Ajouter le support de windows comme hôte Docker.</li>
    294 <li>Pour Microsoft, supporter les API <em>open-orchestration</em> de Docker.</li>
    295 <li>Intégration de Docker dans Microsoft Azure.</li>
    296 <li>Collaboration étroite sur les applications qui ont besoin de plusieurs conteneur (i.e. ce que Fig fait de mieux), et le support d'application qui sont composés de conteneurs Linux et Windows.</li>
    297 </ul>
    298 
    299 <p>Le but <em>ultime</em> de Docker quand il a été distribué de façon libre
    300 était&nbsp;: "__Construire le 'bouton' qui permet à toutes applications
    301 d'être construites et déployées sur n'importe quel serveur, n'importe
    302 où.__" (C'est nettement plus classe en anglais&nbsp;: “''To build the ‘button’
    303 that enables any application to be built and deployed on any server,
    304 anywhere.''”). Ce partenariat est donc une nouvelle marche en direction
    305 de ce dernier.</p>
    306 
    307 
    308 <h4>Conclusion</h4>
    309 
    310 
    311 <p>Un an et demi après la première <em>release</em> publique de Docker et près
    312 de 5 mois après la version 1.0, Docker et sa communauté avancent
    313 toujours aussi vite. Comme Solomon Hykes (CTO et co-fondateur de dotCould)
    314 avait dit lors de la dockerCon 14&nbsp;: "<strong>la valeur réelle de docker n'est pas la technologie, mais le fait que les gens se mettent d'accord sur quelque chose</strong>"&nbsp;; Docker Inc. pousse principalement dans le sens de la
    315 standardisation. Le développement de
    316 <a href="https://github.com/docker/libcontainer">libcontainer</a>,
    317 <a href="https://github.com/docker/libchan">libchan</a> et
    318 <a href="https://github.com/docker/libswarm">libswarm</a> sont des projets qui
    319 vont dans ce sens. La communautée est toute aussi <em>bouillante</em> d'idées
    320 et chaque jour voit de nouveau projet plus intéressant les uns que les
    321 autres.</p>
    322 
    323 
    324 <p>Enfin la <strong><a href="http://europe.dockercon.com/">dockerCon Europe</a>, les 4 et 5 décembre 2014</strong> viendra couronner une année très riche du côté de Docker et
    325 de son écosystème. Rendez-vous mi-décembre pour faire un petit retour
    326   sur la première conférence européenne Docker ;-).</>
    327 
    328 
    329       
    330     </article>
    331     <hr />
    332     <div class="prev-next">
    333       
    334       <a class="paging-link prev" href="/posts/2015-05-01-orgmode-et-jekyll/" title="Orgmode et Jekyll">← Previous post</a>
    335       
    336 
    337       
    338       <a class="paging-link next" href="/posts/2014-03-24-redesign-et-r%C3%A9solutions/" title="Redesign Et Résolutions">Next post →</a>
    339       
    340     </div>
    341 
    342   </div>
    343 </div>
    344 
    345 <footer>
    346   <nav>
    347     
    348     <a href="/">home</a>
    349     <span class="text-muted"> | </span>
    350     
    351     <a href="/about">about</a>
    352     <span class="text-muted"> | </span>
    353     
    354     <a href="/archive">archive</a>
    355     <span class="text-muted"> | </span>
    356     
    357     <a href="/categories">categories</a>
    358     <span class="text-muted"> | </span>
    359     
    360     <a href="/tags">tags</a>
    361     <span class="text-muted"> | </span>
    362     
    363     <a href="https://twitter.com/vdemeest">twitter</a>
    364     <span class="text-muted"> | </span>
    365     
    366     <a href="https://github.com/vdemeester">github</a>
    367     <span class="text-muted"> | </span>
    368     
    369     <a href="https://vincent.demeester.fr/index.xml">rss</a>
    370   </nav>
    371   <br/>
    372   <address>
    373     <span class="copyright">
    374       Content and design by Vincent Demeester
    375       (<a rel="licence" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Some rights reserved</a>)
    376     </span><br />
    377     <span class="engine">
    378       Powered by <a href="https://gohugo.io/">Hugo</a> and <a href="https://github.com/kaushalmodi/ox-hugo/">ox-hugo</a>
    379     </span>
    380   </address>
    381 </footer>
    382 </body>
    383