{"id":872,"date":"2020-12-18T15:17:30","date_gmt":"2020-12-18T14:17:30","guid":{"rendered":"https:\/\/loeilduse.fr\/?p=872"},"modified":"2020-12-21T17:13:48","modified_gmt":"2020-12-21T16:13:48","slug":"passer-du-code-source-a-une-image-container-en-une-seule-commande","status":"publish","type":"post","link":"https:\/\/loeilduse.fr\/?p=872&lang=fr","title":{"rendered":"Passer du code source \u00e0 une image container en une seule commande"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Le passage d&#8217;un code source \u00e0 une image container pr\u00eate \u00e0 \u00eatre consomm\u00e9e est une \u00e9tape indispensable et l&#8217;effort que cela n\u00e9cessite est souvent sous-estim\u00e9. Pour synth\u00e9tiser, ce passage consiste \u00e0 cr\u00e9er un fichier de configuration pour renseigner sur quel image de syst\u00e8me d&#8217;exploitation doit fonctionner le container, comment t\u00e9l\u00e9charger le compilateur, comment compiler l&#8217;application et comment ex\u00e9cuter l&#8217;application. Ensuite, il faut lancer la commande de construction du container puis le charger dans une registry pour un t\u00e9l\u00e9chargement et une ex\u00e9cution ult\u00e9rieurs. Sur un petit environnement avec quelques containers, quelques fichiers de configuration et quelques commandes \u00e0 ex\u00e9cuter, c&#8217;est faisable. Cependant, \u00e7a devient vite plus compliqu\u00e9 \u00e0 mesure o\u00f9 le nombre de container cro\u00eet. \u00c7a sera d&#8217;autant plus compliqu\u00e9 avec l&#8217;in\u00e9vitable gestion du cycle de vie des applications, celle-ci est induite par la mise \u00e0 jour du code applicatif et par les mises \u00e0 jour de s\u00e9curit\u00e9 des composants li\u00e9s au syst\u00e8me d&#8217;exploitation. C&#8217;est une t\u00e2che fastidieuse et chronophage.<br \/>\n<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">L&#8217;agilit\u00e9 \u00e9tant l&#8217;objectif premier de l&#8217;utilisation des containers, l&#8217;automatisation du processus de cr\u00e9ation d&#8217;image container est vite devenue indispensable. Dans la majorit\u00e9 des cas, l&#8217;utilisation d&#8217;un pipe-line est privil\u00e9gi\u00e9e pour encha\u00eener les commandes de cr\u00e9ation et de mise \u00e0 jour. La mise en place et le maintien en condition op\u00e9rationnel de ce pipeline n&#8217;est pas non plus \u00e0 n\u00e9gliger. <\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">J&#8217;ai r\u00e9cemment test\u00e9 VMware Tanzu Build Service (TBS), je me suis vite rendu compte qu&#8217;il simplifie drastiquement ce processus et j&#8217;ai \u00e9t\u00e9 s\u00e9duit par sa facilit\u00e9 d&#8217;utilisation. En effet en une seule commande, le code source est transform\u00e9 en image container puis stock\u00e9e dans une registry et ce sans que le d\u00e9veloppeur n&#8217;ait \u00e0 g\u00e9n\u00e9rer de fichier de configuration.<br \/>\n<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-878 aligncenter\" src=\"https:\/\/loeilduse.fr\/wp-content\/uploads\/2020\/12\/TBS-image-creation-1024x234.png\" alt=\"\" width=\"696\" height=\"159\" srcset=\"https:\/\/loeilduse.fr\/wp-content\/uploads\/2020\/12\/TBS-image-creation-1024x234.png 1024w, https:\/\/loeilduse.fr\/wp-content\/uploads\/2020\/12\/TBS-image-creation-300x69.png 300w, https:\/\/loeilduse.fr\/wp-content\/uploads\/2020\/12\/TBS-image-creation-768x176.png 768w, https:\/\/loeilduse.fr\/wp-content\/uploads\/2020\/12\/TBS-image-creation.png 1437w\" sizes=\"(max-width: 696px) 100vw, 696px\" \/><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Les containers sont cr\u00e9\u00e9s au format OCI (Open Container Initiative, lanc\u00e9e en 2015 par Docker) assurant leur fonctionnement sur l&#8217;ensemble des runtime container du march\u00e9 \u00e0 condition qu&#8217;ils respectent cette initiative.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">D&#8217;un point de vu macro, l&#8217;image container g\u00e9n\u00e9r\u00e9e est d\u00e9coup\u00e9e en 3 parties ind\u00e9pendantes : la Stack, le buildpack et l&#8217;Application qui permettent une modification granulaire.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-879 aligncenter\" src=\"https:\/\/loeilduse.fr\/wp-content\/uploads\/2020\/12\/TBS-stacks.png\" alt=\"\" width=\"141\" height=\"161\" \/><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">La stack (appel\u00e9e aussi Cloudstack) concerne la partie li\u00e9e au syst\u00e8me d&#8217;exploitation, le Buildpack concerne la partie qui permet de construire et d&#8217;ex\u00e9cuter l&#8217;application (java, nodejs, php, &#8230;), la partie Application concerne le code source de l&#8217;application. Cela permet de mettre \u00e0 jour granulairement chaque partie de mani\u00e8re ind\u00e9pendante. Ainsi, si par exemple une faille de s\u00e9curit\u00e9 est d\u00e9tect\u00e9e sur la partie stack, TBS permettra de mettre \u00e0 jour que cette partie en appliquant un patch de s\u00e9curit\u00e9.<br \/>\n<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"text-decoration: underline;\"><strong><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Voyons le fonctionnement principal :<\/span><\/strong><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">En entr\u00e9e TBS a besoin d&#8217;un code source (les langages pris en charge sont fonctions des buildpack install\u00e9s (Java, go, php, &#8230;)), ce code source peut \u00eatre, dans un r\u00e9pertoire local, sur un repository git ou encore sur un blob store http au format zip, tgz ou tar.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">En sortie, TBS va stocker le container image dans une registry de type Harbor, GCRIO ou autre. <\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Comme exemple, la commande ci-dessous avec en entr\u00e9e un repository git et en sortie un lien vers une registry priv\u00e9e Harbor :<\/span><\/p>\n<p><span style=\"font-family: courier new, courier, monospace; font-size: 10pt;\"><strong>kp image create<\/strong> spring-music <strong>&#8211;tag<\/strong> harbor.cpod-velocity.az-fkd.cloud-garage.net\/tanzu\/spring-music:1 <strong>&#8211;git<\/strong> https:\/\/github.com\/fbenrejdal\/spring-music.git <strong>&#8211;git-revision<\/strong> master<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">TBS d\u00e9tecte automatiquement les buildpacks dont l&#8217;application a besoin pour construire et ex\u00e9cuter l&#8217;image.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">L&#8217;option <span style=\"font-family: courier new, courier, monospace; font-size: 10pt;\">&#8211;git-revision master<\/span> indique \u00e0 TBS de surveiller les modifications de la version <span style=\"font-family: courier new, courier, monospace; font-size: 10pt;\">master <\/span>et d&#8217;enclencher automatiquement une mise \u00e0 jour de l&#8217;image container si une nouvelle version a \u00e9t\u00e9 &#8220;commit\u00e9e&#8221;. dans ce cas, seule la partie Application de l&#8217;image container est modifi\u00e9e.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\"> La solution TBS vient d\u00e9j\u00e0 avec un certain nombre de buildpack mais il est possible de construire ses propres buildpacks. La commande ci-dessous permet de visualiser les buildpacks d\u00e9j\u00e0 install\u00e9s.<br \/>\n<\/span><\/p>\n<p><span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">$ <strong>kp clusterstore status default<\/strong><\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">Status: Ready<\/span><\/p>\n<p><span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">BUILDPACKAGE ID VERSION HOMEPAGE<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">paketo-buildpacks\/procfile 2.0.2 https:\/\/github.com\/paketo-buildpacks\/procfile<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">tanzu-buildpacks\/dotnet-core 0.0.5<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">tanzu-buildpacks\/go 1.0.6<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">tanzu-buildpacks\/httpd 0.0.38<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">tanzu-buildpacks\/java 3.8.0 https:\/\/github.com\/pivotal-cf\/tanzu-java<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">tanzu-buildpacks\/java-native-image 3.6.0 https:\/\/github.com\/pivotal-cf\/tanzu-java-native-image<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">tanzu-buildpacks\/nginx 0.0.46<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">tanzu-buildpacks\/nodejs 1.2.1<\/span><br \/>\n<span style=\"font-family: courier new, courier, monospace; font-size: 8pt;\">tanzu-buildpacks\/php 0.0.3<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Pour r\u00e9sumer, Tanzu Build Service permet de r\u00e9duire drastiquement le temps et les op\u00e9rations de cr\u00e9ation ainsi que les mises \u00e0 jour des images containers, le d\u00e9veloppeur n&#8217;a plus \u00e0 se soucier \u00e0 g\u00e9rer des fichiers de configuration, il se focalise juste sur son code. TBS d\u00e9tecte tout seul en fonction du code source les d\u00e9pendances dont il a besoin et est capable aussi de d\u00e9tecter les mises \u00e0 jour qui ont \u00e9t\u00e9 &#8220;commit\u00e9es&#8221; pour g\u00e9n\u00e9rer une nouvelle image container. TBS d\u00e9coupe l&#8217;image container en couche : Stack, Buildpack et Application afin de pouvoir mettre \u00e0 jour unitairement chaque partie.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Pour voir comment cr\u00e9er une image et la mettre \u00e0 jour, j&#8217;ai cr\u00e9\u00e9 deux courtes vid\u00e9os :<\/span><\/p>\n<p style=\"text-align: justify; padding-left: 40px;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\"><a href=\"https:\/\/loeilduse.fr\/wp-content\/uploads\/2020\/12\/Part-2-TBS-creation-v2.mkv\" target=\"_blank\" rel=\"noopener noreferrer\">TBS creation d&#8217;une image container \u00e0 partir de github<\/a><\/span><\/p>\n<p style=\"text-align: justify; padding-left: 40px;\"><a href=\"https:\/\/loeilduse.fr\/wp-content\/uploads\/2020\/12\/Part-2-TBS-update.mkv\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">TBS d\u00e9tection automatique d&#8217;une mise \u00e0 jour<\/span><\/a><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Mes coll\u00e8gues sp\u00e9cialistes Alexandre et Guillaume ont anim\u00e9 un webinar en Fran\u00e7ais plus d\u00e9taill\u00e9 sur ce sujet : <\/span><\/p>\n<p style=\"padding-left: 40px; text-align: justify;\"><a href=\"https:\/\/bit.ly\/3lYUVpC\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Cloud Native Buildpack : La formule pour transformer vos applications en conteneurs avec Kubernetes<\/span><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le passage d&#8217;un code source \u00e0 une image container pr\u00eate \u00e0 \u00eatre consomm\u00e9e est une \u00e9tape indispensable et l&#8217;effort que cela n\u00e9cessite est souvent sous-estim\u00e9. Pour synth\u00e9tiser, ce passage consiste \u00e0 cr\u00e9er un fichier de configuration pour renseigner sur quel image de syst\u00e8me d&#8217;exploitation doit fonctionner le container, comment t\u00e9l\u00e9charger le compilateur, comment compiler l&#8217;application<\/p><\/div>\n<div class=\"blog-btn\"><a href=\"https:\/\/loeilduse.fr\/?p=872&#038;lang=fr\" class=\"home-blog-btn\">Lire la suite<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,111,112,1],"tags":[192,191,190,189],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/posts\/872"}],"collection":[{"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=872"}],"version-history":[{"count":43,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/posts\/872\/revisions"}],"predecessor-version":[{"id":918,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/posts\/872\/revisions\/918"}],"wp:attachment":[{"href":"https:\/\/loeilduse.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}