{"id":53484,"date":"2026-10-22T11:19:33","date_gmt":"2026-10-22T04:19:33","guid":{"rendered":"\/fr\/tutoriels\/?p=53484"},"modified":"2026-10-21T11:20:48","modified_gmt":"2026-10-21T04:20:48","slug":"utiliser-node-js-avec-docker","status":"publish","type":"post","link":"\/fr\/tutoriels\/utiliser-node-js-avec-docker\/","title":{"rendered":"Comment utiliser Node.js avec Docker"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Node.js permet de d&eacute;velopper des applications rapides et capables de monter en charge. Pourtant, le fameux &laquo; &ccedil;a fonctionne sur ma machine &raquo; peut vite devenir un casse-t&ecirc;te d&egrave;s que l&rsquo;application quitte votre ordinateur. Les diff&eacute;rences de syst&egrave;me d&rsquo;exploitation, de version de Node.js ou de d&eacute;pendances install&eacute;es peuvent emp&ecirc;cher une application de fonctionner correctement, m&ecirc;me si elle fonctionnait parfaitement pendant le d&eacute;veloppement.<\/p><p class=\"wp-block-paragraph\">Docker r&eacute;sout ce probl&egrave;me en regroupant votre application et tout ce dont elle a besoin pour fonctionner dans un seul conteneur l&eacute;ger. Vous gagnez ainsi en portabilit&eacute; et en coh&eacute;rence : le m&ecirc;me conteneur fonctionne de mani&egrave;re identique sur votre ordinateur, sur celui d&rsquo;un coll&egrave;gue et sur votre VPS de production. Il consomme &eacute;galement moins de ressources qu&rsquo;une machine virtuelle et simplifie le d&eacute;ploiement, puisqu&rsquo;une seule image suffit.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-prerequis-pour-utiliser-node-js-avec-docker\">Pr&eacute;requis pour utiliser Node.js avec Docker<\/h2><p class=\"wp-block-paragraph\">Avant de commencer, assurez-vous de disposer des &eacute;l&eacute;ments suivants :<\/p><ul class=\"wp-block-list\">\n<li><strong>Serveur priv&eacute; virtuel (VPS)<\/strong>. Vous pouvez suivre ce guide sur votre ordinateur, mais vous aurez besoin d&rsquo;un VPS pour h&eacute;berger votre application en production. Le pack <a data-click-id=\"hgr-post-content-link-kvm-2-de-hostinger\" href=\"\/fr\/vps\">KVM 2 de Hostinger<\/a> constitue un excellent point de d&eacute;part pour les projets de petite et moyenne envergure. Il comprend <strong>2<\/strong> c&oelig;urs vCPU, <strong>8 Go<\/strong> de RAM et <strong>100 Go<\/strong> de stockage NVMe pour <strong>7,79 \u20ac\/mois<\/strong>.<\/li>\n\n\n\n<li><strong>Docker install&eacute;<\/strong>. V&eacute;rifiez qu&rsquo;il fonctionne avec la commande <strong>docker &ndash;version<\/strong>. Si vous &ecirc;tes client Hostinger, vous pouvez <a data-click-id=\"hgr-post-content-link-installer-docker\" href=\"\/fr\/tutoriels\/installer-docker-sur-ubuntu\/\">installer Docker<\/a> sur votre VPS en quelques clics gr&acirc;ce &agrave; notre template pr&eacute;configur&eacute;.<\/li>\n\n\n\n<li><strong>Node.js et npm install&eacute;s<\/strong>. V&eacute;rifiez leur installation avec les commandes <strong>node &ndash;version<\/strong> et <strong>npm &ndash;version<\/strong>. Si ce n&rsquo;est pas encore fait, consultez notre guide pour <a data-click-id=\"hgr-post-content-link-installer-node-js\" href=\"\/fr\/tutoriels\/comment-installer-node-js-sur-ubuntu\/\">installer Node.js<\/a> sur Ubuntu.<\/li>\n\n\n\n<li><strong>Connaissances de base des commandes Docker<\/strong>. Il est utile de conna&icirc;tre des commandes comme <strong>docker build<\/strong> et <strong>docker run<\/strong>, car vous les ex&eacute;cuterez r&eacute;guli&egrave;rement dans le terminal.<\/li>\n<\/ul><p>\n\n\n        <div class=\"protip\">\n            <div class=\"protip__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M1.49234 23.5024C1.23229 23.5024 0.972242 23.4024 0.782206 23.2123C0.562165 22.9923 0.452144 22.6822 0.502153 22.3722C0.562165 21.9221 1.14227 17.9113 3.00262 16.351C3.63274 15.8209 4.43289 15.5509 5.26305 15.5609C6.09321 15.5909 6.87335 15.9109 7.47347 16.4911C8.6937 17.6913 8.76371 19.6717 7.6435 20.9919C6.0832 22.8523 2.08245 23.4324 1.63237 23.4924C1.59236 23.4924 1.54235 23.4924 1.50234 23.4924L1.49234 23.5024ZM5.16303 17.5613C4.84297 17.5613 4.53291 17.6713 4.29287 17.8813C3.60274 18.4614 3.07264 19.9317 2.75258 21.242C4.06282 20.9219 5.5331 20.3918 6.11321 19.7017C6.55329 19.1716 6.54329 18.3814 6.0832 17.9213C5.85316 17.7013 5.5431 17.5713 5.20304 17.5613C5.19304 17.5613 5.17303 17.5613 5.16303 17.5613ZM11.7243 21.8821C11.4942 21.8821 11.2642 21.8021 11.0841 21.652C10.8541 21.462 10.7241 21.1819 10.7241 20.8819V15.9109L8.08358 13.2705H3.11264C2.81259 13.2705 2.53254 13.1404 2.3425 12.9104C2.15246 12.6803 2.07245 12.3803 2.12246 12.0902C2.19247 11.7102 2.84259 8.36953 4.70294 7.12929C6.33325 6.04909 8.96375 6.49918 10.244 6.80923C11.5442 4.96889 13.2546 3.4286 15.2349 2.33839C17.4553 1.11816 19.9858 0.518051 22.4963 0.498047C23.0464 0.498047 23.4865 0.948132 23.4865 1.49824C23.4865 5.0389 22.3763 9.97983 17.1753 13.7605C17.4853 15.0408 17.9354 17.6613 16.8552 19.2816C15.615 21.1419 12.2744 21.7921 11.8943 21.8621C11.8343 21.8721 11.7743 21.8821 11.7143 21.8821H11.7243ZM12.7245 16.181V19.6016C13.7146 19.2916 14.7948 18.7915 15.2049 18.1814C15.675 17.4812 15.605 16.091 15.385 14.9008C14.5248 15.3808 13.6346 15.8109 12.7245 16.181ZM9.66388 12.0302L11.9643 14.3307C13.1845 13.8306 14.3648 13.2204 15.485 12.5103C19.9358 9.51974 21.2361 5.60901 21.4561 2.53843C19.6157 2.67846 17.8254 3.20856 16.2051 4.09872C14.2847 5.14892 12.6544 6.68921 11.4942 8.54956C10.7841 9.65977 10.174 10.82 9.66388 12.0302ZM4.39289 11.2701H7.81353C8.1936 10.3599 8.63368 9.46974 9.11377 8.60957C7.92355 8.38953 6.51329 8.31952 5.81315 8.78961C5.19304 9.19968 4.70294 10.3099 4.39289 11.2701Z\" fill=\"#673DE6\"\/>\n                <\/svg>\n                <p class=\"protip__title\">\n                    &#128161; Conseil de pro                <\/p>\n            <\/div>\n            <p class=\"protip__content\">Hostinger propose des templates pr&eacute;configur&eacute;s pour Docker et Node.js, mais vous ne pouvez en installer qu&rsquo;un seul &agrave; la fois. Nous vous recommandons donc d&rsquo;installer d&rsquo;abord Docker &agrave; l&rsquo;aide du template, puis d&rsquo;installer manuellement Node.js &agrave; l&rsquo;aide de commandes, car cette seconde installation est plus simple.<\/p>\n                    <\/div>\n        \n\n\n\n<figure class=\"wp-block-image size-full\"><a data-click-id=\"hgr-post-content-link-hostinger-com-fr-vps\" aria-label=\"Vps\" href=\"https:\/\/www.hostinger.com\/fr\/vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/public\" alt=\"\" class=\"wp-image-41471\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2022\/12\/FR-VPS-hosting_in-text-banner-1024x300-1.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-comment-configurer-une-application-node-js-dans-docker\">Comment configurer une application Node.js dans Docker<\/h2><p class=\"wp-block-paragraph\">Suivez les &eacute;tapes ci-dessous pour cr&eacute;er un conteneur Docker dans lequel ex&eacute;cuter une application Node.js simple. Vous commencerez par choisir une image de base, puis lancerez votre premi&egrave;re application conteneuris&eacute;e.<\/p><h3 class=\"wp-block-heading h-t-title-3\">1. Choisissez l&rsquo;image Docker adapt&eacute;e &agrave; Node.js<\/h3><p class=\"wp-block-paragraph\">Commencez par choisir une image de base pour votre conteneur. <a data-click-id=\"hgr-post-content-link-limage-docker-officielle-de-node-js\" href=\"https:\/\/hub.docker.com\/_\/node\" target=\"_blank\" rel=\"noopener\">L&rsquo;image Docker officielle de Node.js<\/a> se d&eacute;cline en plusieurs variantes pr&eacute;configur&eacute;es, adapt&eacute;es &agrave; diff&eacute;rents besoins.<\/p><p class=\"wp-block-paragraph\">Voici les principales :<\/p><ul class=\"wp-block-list\">\n<li><strong>Images compl&egrave;tes<\/strong>. Plus volumineuses, elles contiennent de nombreux outils et biblioth&egrave;ques, ce qui les rend utiles pour le d&eacute;veloppement et le d&eacute;bogage. Exemple : <strong>node:24<\/strong>.<\/li>\n\n\n\n<li><strong>Images Slim<\/strong>. Plus l&eacute;g&egrave;res que les images compl&egrave;tes, elles contiennent uniquement les composants essentiels au fonctionnement de Node.js. Exemple : <strong>node:24-slim<\/strong>.<\/li>\n\n\n\n<li><strong>Images Alpine<\/strong>. Extr&ecirc;mement l&eacute;g&egrave;res, elles reposent sur Alpine Linux. Leur petite taille r&eacute;duit la surface d&rsquo;attaque, ce qui en fait le meilleur choix pour une image Docker Node.js en production. Exemple : <strong>node:24-alpine<\/strong>.<\/li>\n<\/ul><p class=\"wp-block-paragraph\">Pour la production, nous recommandons les images Alpine afin de conserver des conteneurs l&eacute;gers, rapides et s&eacute;curis&eacute;s.<\/p><h3 class=\"wp-block-heading h-t-title-3\">2. Cr&eacute;ez une application Node.js simple<\/h3><p class=\"wp-block-paragraph\">Cr&eacute;ez ensuite une application Node.js simple. Ouvrez votre terminal et connectez-vous &agrave; votre VPS via SSH :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ssh root@your_vps_ip<\/pre><p class=\"wp-block-paragraph\">Si vous utilisez un VPS Hostinger, vous trouverez l&rsquo;adresse IP de votre serveur dans <strong>Tableau de bord Hostinger &rarr; VPS &rarr; G&eacute;rer &rarr; Aper&ccedil;u &rarr; D&eacute;tails du VPS<\/strong>.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb42109057\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb42109057\" class=\"aligncenter size-large is-resized wp-lightbox-container\"><img decoding=\"async\" width=\"1101\" height=\"402\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/07\/ipv4-vps-hpanel-fr.png\/w=1024,h=1024,fit=scale-down\" alt=\"Adresse IPv4 du serveur affich&eacute;e sur la page &laquo; Vue d&rsquo;ensemble &raquo; du VPS dans hPanel\" class=\"wp-image-51096\" style=\"width:840px;height:auto\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/07\/ipv4-vps-hpanel-fr.png\/w=1101,fit=scale-down 1101w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/07\/ipv4-vps-hpanel-fr.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/07\/ipv4-vps-hpanel-fr.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/07\/ipv4-vps-hpanel-fr.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/07\/ipv4-vps-hpanel-fr.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1101px) 100vw, 1101px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Une fois connect&eacute;, cr&eacute;ez un r&eacute;pertoire pour votre projet, puis acc&eacute;dez-y :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir node-docker-app &amp;&amp; cd node-docker-app<\/pre><p class=\"wp-block-paragraph\">Initialisez le projet avec <strong>npm<\/strong>. Cette commande g&eacute;n&egrave;re un fichier <strong>package.json<\/strong> qui permet de g&eacute;rer les m&eacute;tadonn&eacute;es et les d&eacute;pendances de votre application :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm init -y<\/pre><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb4210c846\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb4210c846\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"567\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-mkdir-cd-npm-init.png\/w=1024,h=1024,fit=scale-down\" alt=\"R&eacute;sultat des commandes mkdir, cd et npm init dans le terminal\" class=\"wp-image-53458\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-mkdir-cd-npm-init.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-mkdir-cd-npm-init.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-mkdir-cd-npm-init.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-mkdir-cd-npm-init.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Cr&eacute;ez maintenant un fichier nomm&eacute; <strong>app.js<\/strong> &agrave; l&rsquo;aide d&rsquo;un &eacute;diteur de texte comme <strong><a data-click-id=\"hgr-post-content-link-nano\" href=\"\/fr\/tutoriels\/nano\/\">nano<\/a><\/strong> :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nano app.js<\/pre><p class=\"wp-block-paragraph\">Collez le code suivant dans le fichier. Ce script cr&eacute;e un serveur HTTP simple qui renvoie le message &laquo; Hello, Docker! &raquo; :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const http = require(\"http\");\n\nconst port = 3000;\n\nconst server = http.createServer((req, res) =&gt; {\n  res.writeHead(200, { \"Content-Type\": \"text\/plain\" });\n  res.end(\"Hello, Docker!\");\n});\n\nserver.listen(port, () =&gt; {\n  console.log(`Server running at http:\/\/localhost:${port}`);\n});<\/pre><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb4210fac9\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb4210fac9\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"597\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-app-js.png\/w=1024,h=1024,fit=scale-down\" alt=\"Contenu du fichier app.js ouvert dans l'&eacute;diteur de texte nano\" class=\"wp-image-53456\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-app-js.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-app-js.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-app-js.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-app-js.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Enregistrez le fichier et quittez <strong>nano<\/strong> en appuyant sur <strong>Ctrl + X &rarr; Y &rarr; Entr&eacute;e<\/strong>.<\/p><h3 class=\"wp-block-heading h-t-title-3\">3. Cr&eacute;ez un Dockerfile simple<\/h3><p class=\"wp-block-paragraph\">Un Dockerfile est un fichier texte qui contient les instructions n&eacute;cessaires &agrave; la cr&eacute;ation d&rsquo;une image Docker, &eacute;tape par &eacute;tape. Cr&eacute;ez un fichier nomm&eacute; <strong>Dockerfile<\/strong>, sans extension, &agrave; la racine de votre projet :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nano Dockerfile<\/pre><p class=\"wp-block-paragraph\">Ajoutez le contenu suivant. Il s&rsquo;agit d&rsquo;un exemple de Dockerfile simple pour Node.js :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Utiliser une image Node.js bas&eacute;e sur Alpine\nFROM node:24-alpine\n\n# D&eacute;finir le r&eacute;pertoire de travail dans le conteneur\nWORKDIR \/app\n\n# Copier les fichiers package.json et package-lock.json\nCOPY package*.json .\/\n\n# Installer les d&eacute;pendances de l'application\nRUN npm install\n\n# Copier le reste du code source de l'application\nCOPY . .\n\n# Exposer le port 3000 vers l'ext&eacute;rieur\nEXPOSE 3000\n\n# Commande pour ex&eacute;cuter l'application\nCMD [\"node\", \"app.js\"]<\/pre><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb42113279\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb42113279\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"586\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-dockerfile.png\/w=1024,h=1024,fit=scale-down\" alt=\"Contenu du Dockerfile ouvert dans l'&eacute;diteur de texte nano\" class=\"wp-image-53457\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-dockerfile.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-dockerfile.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-dockerfile.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-nano-dockerfile.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Une fois termin&eacute;, enregistrez et fermez le fichier.<\/p><h3 class=\"wp-block-heading h-t-title-3\">4. Cr&eacute;ez l&rsquo;image Docker<\/h3><p class=\"wp-block-paragraph\">Apr&egrave;s avoir cr&eacute;&eacute; le Dockerfile, ex&eacute;cutez la commande suivante depuis le r&eacute;pertoire du projet pour cr&eacute;er votre image Docker :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker build -t node-docker-app .<\/pre><p class=\"wp-block-paragraph\">L&rsquo;option <strong>-t<\/strong> attribue le nom <strong>node-docker-app<\/strong> &agrave; l&rsquo;image. Si la cr&eacute;ation de l&rsquo;image r&eacute;ussit, Docker affiche un message de confirmation.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb42116d39\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb42116d39\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"600\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-docker-build.png\/w=1024,h=1024,fit=scale-down\" alt=\"R&eacute;sultat de la commande docker build dans le terminal\" class=\"wp-image-53463\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-docker-build.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-docker-build.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-docker-build.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-docker-build.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><h3 class=\"wp-block-heading h-t-title-3\">5. Lancez le conteneur<\/h3><p class=\"wp-block-paragraph\">Une fois l&rsquo;image cr&eacute;&eacute;e, ex&eacute;cutez votre application Node.js dans un conteneur Docker avec la commande suivante :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d -p 3000:3000 node-docker-app<\/pre><p class=\"wp-block-paragraph\">L&rsquo;option <strong>-p 3000:3000<\/strong> associe le port <strong>3000<\/strong> de votre serveur au port <strong>3000<\/strong> du conteneur, tandis que l&rsquo;option <strong>-d<\/strong> permet d&rsquo;ex&eacute;cuter le conteneur en mode d&eacute;tach&eacute;, c&rsquo;est-&agrave;-dire en arri&egrave;re-plan.<\/p><p class=\"wp-block-paragraph\">Ouvrez votre navigateur et acc&eacute;dez &agrave; <strong>http:\/\/your_vps_ip:3000<\/strong> pour v&eacute;rifier que l&rsquo;application fonctionne. Le message &laquo; Hello, Docker! &raquo; devrait s&rsquo;afficher.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb4211a517\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb4211a517\" class=\"aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"830\" height=\"320\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/browser-hello-docker.png\/public\" alt=\"Message &laquo; Hello, Docker! &raquo; affich&eacute; dans le navigateur\" class=\"wp-image-53465\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/browser-hello-docker.png\/w=830,fit=scale-down 830w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/browser-hello-docker.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/browser-hello-docker.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/browser-hello-docker.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 830px) 100vw, 830px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Apr&egrave;s avoir cr&eacute;&eacute; et ex&eacute;cut&eacute; cette premi&egrave;re application, voyons comment conteneuriser une application Node.js plus complexe.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-comment-conteneuriser-une-application-node-js-existante\">Comment conteneuriser une application Node.js existante<\/h2><p class=\"wp-block-paragraph\">Pour conteneuriser un projet Node.js existant, vous devez <strong>pr&eacute;parer votre application, cr&eacute;er un fichier .dockerignore pour limiter la taille de l&rsquo;image, puis r&eacute;diger un Dockerfile optimis&eacute;<\/strong>.<\/p><h3 class=\"wp-block-heading h-t-title-3\">1. Pr&eacute;parez l&rsquo;application pour Docker<\/h3><p class=\"wp-block-paragraph\">Avant de commencer, v&eacute;rifiez que votre projet est pr&ecirc;t &agrave; &ecirc;tre conteneuris&eacute;.<\/p><ul class=\"wp-block-list\">\n<li><strong>V&eacute;rifiez le fichier package.json<\/strong>. Assurez-vous qu&rsquo;il r&eacute;pertorie correctement toutes les d&eacute;pendances et contient un script <strong>start<\/strong> permettant de lancer l&rsquo;application.<\/li>\n\n\n\n<li><strong>Verrouillez les versions des d&eacute;pendances<\/strong>. Ex&eacute;cutez <strong>npm install<\/strong> pour cr&eacute;er ou mettre &agrave; jour le fichier <strong>package-lock.json<\/strong>. Ce fichier garantit l&rsquo;utilisation des m&ecirc;mes versions de d&eacute;pendances dans les diff&eacute;rents environnements.<\/li>\n\n\n\n<li><strong>Testez l&rsquo;application en local<\/strong>. Ex&eacute;cutez <strong>npm start<\/strong> sur votre ordinateur pour v&eacute;rifier que tout fonctionne comme pr&eacute;vu avant de poursuivre.<\/li>\n<\/ul><h3 class=\"wp-block-heading h-t-title-3\">2. Cr&eacute;ez un fichier .dockerignore<\/h3><p class=\"wp-block-paragraph\">Le fichier <strong>.dockerignore<\/strong> emp&ecirc;che la copie de certains fichiers et r&eacute;pertoires dans votre image Docker. Vous &eacute;vitez ainsi d&rsquo;y inclure des &eacute;l&eacute;ments inutiles, ce qui contribue &agrave; r&eacute;duire sa taille et &agrave; renforcer sa s&eacute;curit&eacute;.<\/p><p class=\"wp-block-paragraph\">&Agrave; l&rsquo;aide de <strong>nano<\/strong>, cr&eacute;ez un fichier nomm&eacute; <strong>.dockerignore<\/strong> &agrave; la racine de votre projet, puis ajoutez le contenu suivant :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">node_modules\nnpm-debug.log\n.env\n.DS_Store\nlogs\/\ntmp\/\ndist\/\ncoverage\/<\/pre><p class=\"wp-block-paragraph\">Ce fichier exclut les &eacute;l&eacute;ments suivants :<\/p><ul class=\"wp-block-list\">\n<li><strong>node_modules<\/strong>. Les d&eacute;pendances sont install&eacute;es dans le conteneur. Il est donc inutile d&rsquo;y copier le r&eacute;pertoire local.<\/li>\n\n\n\n<li><strong>npm-debug.log<\/strong>, <strong>logs\/<\/strong>, <strong>tmp\/<\/strong>. Ces journaux et fichiers temporaires ne sont pas n&eacute;cessaires en production.<\/li>\n\n\n\n<li><strong>.env<\/strong>. Ce fichier contient des cl&eacute;s sensibles et ne doit jamais &ecirc;tre int&eacute;gr&eacute; &agrave; une image.<\/li>\n\n\n\n<li><strong>dist\/<\/strong>, <strong>coverage\/<\/strong>. Les fichiers g&eacute;n&eacute;r&eacute;s lors de la compilation et les rapports de test ne sont pas n&eacute;cessaires &agrave; l&rsquo;ex&eacute;cution de l&rsquo;application.<\/li>\n<\/ul><p>\n\n\n        <div class=\"protip\">\n            <div class=\"protip__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M1.49234 23.5024C1.23229 23.5024 0.972242 23.4024 0.782206 23.2123C0.562165 22.9923 0.452144 22.6822 0.502153 22.3722C0.562165 21.9221 1.14227 17.9113 3.00262 16.351C3.63274 15.8209 4.43289 15.5509 5.26305 15.5609C6.09321 15.5909 6.87335 15.9109 7.47347 16.4911C8.6937 17.6913 8.76371 19.6717 7.6435 20.9919C6.0832 22.8523 2.08245 23.4324 1.63237 23.4924C1.59236 23.4924 1.54235 23.4924 1.50234 23.4924L1.49234 23.5024ZM5.16303 17.5613C4.84297 17.5613 4.53291 17.6713 4.29287 17.8813C3.60274 18.4614 3.07264 19.9317 2.75258 21.242C4.06282 20.9219 5.5331 20.3918 6.11321 19.7017C6.55329 19.1716 6.54329 18.3814 6.0832 17.9213C5.85316 17.7013 5.5431 17.5713 5.20304 17.5613C5.19304 17.5613 5.17303 17.5613 5.16303 17.5613ZM11.7243 21.8821C11.4942 21.8821 11.2642 21.8021 11.0841 21.652C10.8541 21.462 10.7241 21.1819 10.7241 20.8819V15.9109L8.08358 13.2705H3.11264C2.81259 13.2705 2.53254 13.1404 2.3425 12.9104C2.15246 12.6803 2.07245 12.3803 2.12246 12.0902C2.19247 11.7102 2.84259 8.36953 4.70294 7.12929C6.33325 6.04909 8.96375 6.49918 10.244 6.80923C11.5442 4.96889 13.2546 3.4286 15.2349 2.33839C17.4553 1.11816 19.9858 0.518051 22.4963 0.498047C23.0464 0.498047 23.4865 0.948132 23.4865 1.49824C23.4865 5.0389 22.3763 9.97983 17.1753 13.7605C17.4853 15.0408 17.9354 17.6613 16.8552 19.2816C15.615 21.1419 12.2744 21.7921 11.8943 21.8621C11.8343 21.8721 11.7743 21.8821 11.7143 21.8821H11.7243ZM12.7245 16.181V19.6016C13.7146 19.2916 14.7948 18.7915 15.2049 18.1814C15.675 17.4812 15.605 16.091 15.385 14.9008C14.5248 15.3808 13.6346 15.8109 12.7245 16.181ZM9.66388 12.0302L11.9643 14.3307C13.1845 13.8306 14.3648 13.2204 15.485 12.5103C19.9358 9.51974 21.2361 5.60901 21.4561 2.53843C19.6157 2.67846 17.8254 3.20856 16.2051 4.09872C14.2847 5.14892 12.6544 6.68921 11.4942 8.54956C10.7841 9.65977 10.174 10.82 9.66388 12.0302ZM4.39289 11.2701H7.81353C8.1936 10.3599 8.63368 9.46974 9.11377 8.60957C7.92355 8.38953 6.51329 8.31952 5.81315 8.78961C5.19304 9.19968 4.70294 10.3099 4.39289 11.2701Z\" fill=\"#673DE6\"\/>\n                <\/svg>\n                <p class=\"protip__title\">\n                    &#128161; Conseil de pro                <\/p>\n            <\/div>\n            <p class=\"protip__content\">V&eacute;rifiez r&eacute;guli&egrave;rement votre fichier <strong>.dockerignore<\/strong> pour vous assurer qu'il reste adapt&eacute; &agrave; votre projet. Excluez syst&eacute;matiquement les informations sensibles, comme les cl&eacute;s API et les identifiants.<\/p>\n                    <\/div>\n        \n\n\n\n<\/p><h3 class=\"wp-block-heading h-t-title-3\">3. Cr&eacute;ez un Dockerfile adapt&eacute; &agrave; la production<\/h3><p class=\"wp-block-paragraph\">Un Dockerfile adapt&eacute; &agrave; la production optimise la s&eacute;curit&eacute; et les performances de votre application. Il repose sur une image de base minimale, installe uniquement les d&eacute;pendances de production et d&eacute;finit les variables d&rsquo;environnement appropri&eacute;es.<\/p><p class=\"wp-block-paragraph\">Voici un exemple :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Utiliser une image de base Node.js l&eacute;g&egrave;re\nFROM node:24-alpine\n\n# D&eacute;finir le r&eacute;pertoire de travail\nWORKDIR \/usr\/src\/app\n\n# Copier les fichiers de gestion des d&eacute;pendances et installer uniquement les d&eacute;pendances de production\nCOPY package*.json .\/\nRUN npm ci --omit=dev\n\n# Copier les fichiers de l'application\nCOPY . .\n\n# D&eacute;finir les variables d'environnement pour la production\nENV NODE_ENV=production\n\n# Exposer le port de l'application\nEXPOSE 3000\n\n# Commande pour d&eacute;marrer l'application\nCMD [\"node\", \"app.js\"]<\/pre><p class=\"wp-block-paragraph\">Chaque instruction du Dockerfile remplit une fonction pr&eacute;cise :<\/p><figure tabindex=\"0\" class=\"wp-block-table\"><table><thead><tr><th><strong>Commande<\/strong><\/th><th><strong>Fonction<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>FROM node:24-alpine<\/strong><\/td><td>Utilise une image de base Node.js minimale.<\/td><\/tr><tr><td><strong>WORKDIR \/usr\/src\/app<\/strong><\/td><td>D&eacute;finit le r&eacute;pertoire de travail pour les commandes suivantes.<\/td><\/tr><tr><td><strong>COPY package*.json .\/<\/strong><\/td><td>Copie les fichiers de gestion des d&eacute;pendances dans le conteneur.<\/td><\/tr><tr><td><strong>RUN npm ci &ndash;omit=dev<\/strong><\/td><td>Installe uniquement les d&eacute;pendances de production afin de r&eacute;duire la taille de l&rsquo;image.<\/td><\/tr><tr><td><strong>COPY . .<\/strong><\/td><td>Copie le reste du code source de l&rsquo;application.<\/td><\/tr><tr><td><strong>ENV NODE_ENV=production<\/strong><\/td><td>Configure l&rsquo;application pour qu&rsquo;elle s&rsquo;ex&eacute;cute en mode production et b&eacute;n&eacute;ficie de meilleures performances.<\/td><\/tr><tr><td><strong>EXPOSE 3000<\/strong><\/td><td>Indique que le conteneur &eacute;coute sur le port <strong>3000<\/strong>.<\/td><\/tr><tr><td><strong>CMD [&ldquo;node&rdquo;, &ldquo;app.js&rdquo;]<\/strong><\/td><td>D&eacute;finit la commande ex&eacute;cut&eacute;e par d&eacute;faut au d&eacute;marrage du conteneur.<\/td><\/tr><\/tbody><\/table><\/figure><h3 class=\"wp-block-heading h-t-title-3\">4. Optimisez l&rsquo;image avec une construction multi-&eacute;tapes<\/h3><p class=\"wp-block-paragraph\">Pour les applications qui n&eacute;cessitent une &eacute;tape de compilation, par exemple pour transpiler du TypeScript ou regrouper des fichiers avec Webpack, un Dockerfile multi-&eacute;tapes constitue la meilleure solution.<\/p><p class=\"wp-block-paragraph\">Cette technique s&eacute;pare l&rsquo;environnement de compilation de l&rsquo;environnement d&rsquo;ex&eacute;cution final, ce qui permet d&rsquo;obtenir une image de production beaucoup plus l&eacute;g&egrave;re.<\/p><p class=\"wp-block-paragraph\">Une construction multi-&eacute;tapes utilise plusieurs instructions <strong>FROM<\/strong>. La premi&egrave;re &eacute;tape permet de compiler l&rsquo;application et ses ressources, tandis que la seconde ne copie que les fichiers compil&eacute;s n&eacute;cessaires dans une nouvelle image.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb4211df3e\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb4211df3e\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"611\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/construction-Docker-en-plusieurs-etapes-pour-Nodejs.png\/w=1024,h=1024,fit=scale-down\" alt=\"Sch&eacute;ma de la construction multi-&eacute;tapes d'une image Docker pour Node.js\" class=\"wp-image-53466\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/construction-Docker-en-plusieurs-etapes-pour-Nodejs.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/construction-Docker-en-plusieurs-etapes-pour-Nodejs.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/construction-Docker-en-plusieurs-etapes-pour-Nodejs.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/construction-Docker-en-plusieurs-etapes-pour-Nodejs.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Voici un exemple de Dockerfile multi-&eacute;tapes :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># &Eacute;tape 1 : Compiler l'application\nFROM node:24-alpine AS builder\n\nWORKDIR \/usr\/src\/app\n\nCOPY package*.json .\/\n\nRUN npm install\n\nCOPY . .\n\nRUN npm run build\n\n# &Eacute;tape 2 : Cr&eacute;er l'image de production\nFROM node:24-alpine\n\nWORKDIR \/usr\/src\/app\n\n# Copier les fichiers compil&eacute;s et les d&eacute;pendances de production\nCOPY --from=builder \/usr\/src\/app\/dist .\/dist\n\nCOPY package*.json .\/\n\nRUN npm ci --omit=dev\n\n# D&eacute;finir les variables d'environnement\nENV NODE_ENV=production\n\n# Exposer le port de l'application\nEXPOSE 3000\n\n# D&eacute;marrer l'application\nCMD [\"node\", \"dist\/app.js\"]<\/pre><p class=\"wp-block-paragraph\">Cette m&eacute;thode permet d&rsquo;obtenir une image finale qui ne contient que les &eacute;l&eacute;ments n&eacute;cessaires &agrave; l&rsquo;ex&eacute;cution de l&rsquo;application, ce qui la rend plus l&eacute;g&egrave;re, plus rapide et plus s&eacute;curis&eacute;e.<\/p><p class=\"wp-block-paragraph\">Une fois votre Dockerfile optimis&eacute; pr&ecirc;t, utilisez les m&ecirc;mes commandes <strong>docker build<\/strong> et <strong>docker run<\/strong> que pr&eacute;c&eacute;demment pour cr&eacute;er l&rsquo;image et lancer le conteneur. Vous pouvez maintenant tester votre conteneur.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-comment-tester-votre-conteneur-docker-executant-node-js\">Comment tester votre conteneur Docker ex&eacute;cutant Node.js<\/h2><p class=\"wp-block-paragraph\">Une fois votre application Node.js en cours d&rsquo;ex&eacute;cution dans un conteneur, vous devez la tester pour v&eacute;rifier qu&rsquo;elle fonctionne comme pr&eacute;vu dans un environnement proche de celui de production.<\/p><p class=\"wp-block-paragraph\">Commencez par envoyer une requ&ecirc;te &agrave; l&rsquo;aide de <a data-click-id=\"hgr-post-content-link-curl\" href=\"https:\/\/www.hostinger.com\/fr\/tutoriels\/comment-utiliser-la-commande-curl-sous-linux\/\">curl<\/a> ou d&rsquo;un navigateur web. Dans votre terminal, ex&eacute;cutez :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl http:\/\/your_vps_ip:3000<\/pre><p class=\"wp-block-paragraph\">Cette commande devrait renvoyer le message &laquo; Hello, Docker! &raquo;.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb4212182e\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb4212182e\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"67\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-curl.png\/w=1024,h=1024,fit=scale-down\" alt=\"R&eacute;sultat de la commande curl dans le terminal\" class=\"wp-image-53464\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-curl.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-curl.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-curl.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/terminal-curl.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Consultez ensuite les journaux du conteneur pour surveiller son fonctionnement et diagnostiquer d&rsquo;&eacute;ventuels probl&egrave;mes :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker logs container_id_or_name<\/pre><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6adbb421250c7\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6adbb421250c7\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"71\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/journal-docker-terminal.png\/w=1024,h=1024,fit=scale-down\" alt=\"R&eacute;sultat de la commande docker logs dans le terminal\" class=\"wp-image-53471\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/journal-docker-terminal.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/journal-docker-terminal.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/journal-docker-terminal.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/46\/2026\/10\/journal-docker-terminal.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Si vous ne connaissez pas l&rsquo;identifiant du conteneur, affichez la liste des conteneurs en cours d&rsquo;ex&eacute;cution avec la commande suivante :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker ps<\/pre><p class=\"wp-block-paragraph\">Pour effectuer un d&eacute;bogage interactif, ouvrez un shell dans le conteneur en cours d&rsquo;ex&eacute;cution avec <strong>docker exec<\/strong> :<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker exec -it container_id_or_name sh<\/pre><p class=\"wp-block-paragraph\">Cette commande vous permet d&rsquo;explorer directement le syst&egrave;me de fichiers du conteneur et de r&eacute;soudre les probl&egrave;mes rencontr&eacute;s.<\/p><p class=\"wp-block-paragraph\">Si vous rencontrez des probl&egrave;mes d&rsquo;autorisation lors de l&rsquo;ex&eacute;cution des commandes Docker, consultez notre guide pour <a data-click-id=\"hgr-post-content-link-corriger-lerreur-docker-permission-denied\" href=\"\/fr\/tutoriels\/docker-permission-denied\/\">corriger l&rsquo;erreur &laquo; Docker permission denied &raquo;<\/a>.<\/p><p class=\"wp-block-paragraph\">Enfin, ajoutez un contr&ocirc;le d&rsquo;&eacute;tat reposant sur un point de terminaison l&eacute;ger, par exemple <strong>\/health<\/strong>, qui indique l&rsquo;&eacute;tat de votre application. Configurez Docker pour qu&rsquo;il interroge r&eacute;guli&egrave;rement ce point de terminaison afin de v&eacute;rifier que le conteneur fonctionne correctement et de d&eacute;tecter toute d&eacute;faillance.<\/p><p class=\"wp-block-paragraph\">Une fois votre conteneur enti&egrave;rement test&eacute;, vous pouvez appliquer les bonnes pratiques pour qu&rsquo;il reste efficace et pr&ecirc;t pour la production.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-quelles-sont-les-bonnes-pratiques-pour-utiliser-node-js-avec-docker\">Quelles sont les bonnes pratiques pour utiliser Node.js avec Docker ?<\/h2><p class=\"wp-block-paragraph\">En suivant ces bonnes pratiques, vous pouvez cr&eacute;er des images Docker s&eacute;curis&eacute;es, efficaces et faciles &agrave; maintenir pour vos applications Node.js. Voici les principales recommandations :<\/p><ul class=\"wp-block-list\">\n<li><strong>Utilisez des images de base l&eacute;g&egrave;res<\/strong>. Privil&eacute;giez les images Alpine ou Slim plut&ocirc;t que les images compl&egrave;tes en production. Les images plus petites se construisent plus rapidement et pr&eacute;sentent une surface d&rsquo;attaque r&eacute;duite.<\/li>\n\n\n\n<li><strong>Installez uniquement les d&eacute;pendances de production<\/strong>. Utilisez <strong>npm ci &ndash;omit=dev<\/strong> dans votre Dockerfile pour &eacute;viter d&rsquo;installer les d&eacute;pendances de d&eacute;veloppement, comme les biblioth&egrave;ques de test. Ces derni&egrave;res ne sont pas n&eacute;cessaires dans l&rsquo;image finale, et leur exclusion permet d&rsquo;en r&eacute;duire la taille.<\/li>\n\n\n\n<li><strong>D&eacute;finissez NODE_ENV=production<\/strong>. Cette variable d&rsquo;environnement indique aux biblioth&egrave;ques comme Express d&rsquo;activer certaines optimisations, notamment la mise en cache des templates de vue et la r&eacute;duction des traitements li&eacute;s au d&eacute;bogage.<\/li>\n\n\n\n<li><strong>Limitez la taille des images<\/strong>. Utilisez des constructions multi-&eacute;tapes pour s&eacute;parer les outils de compilation de l&rsquo;environnement d&rsquo;ex&eacute;cution. Ajoutez &eacute;galement un fichier <strong>.dockerignore<\/strong> pour exclure du contexte de construction les journaux, les modules locaux et les autres fichiers inutiles.<\/li>\n\n\n\n<li><strong>Mettez r&eacute;guli&egrave;rement &agrave; jour les images de base<\/strong>. R&eacute;cup&eacute;rez p&eacute;riodiquement la derni&egrave;re version de votre image de base, puis recr&eacute;ez l&rsquo;image de votre application pour b&eacute;n&eacute;ficier des correctifs de s&eacute;curit&eacute; et des am&eacute;liorations de performances.<\/li>\n\n\n\n<li><strong>Ex&eacute;cutez l&rsquo;application avec un utilisateur non-root<\/strong>. Pour renforcer la s&eacute;curit&eacute;, &eacute;vitez d&rsquo;ex&eacute;cuter votre application en tant qu&rsquo;utilisateur root dans le conteneur. Cr&eacute;ez plut&ocirc;t un utilisateur d&eacute;di&eacute; dans votre Dockerfile et passez &agrave; ce compte avant de d&eacute;marrer l&rsquo;application.<\/li>\n\n\n\n<li><strong>Faites &eacute;voluer votre application pour g&eacute;rer davantage de charge<\/strong>. Utilisez des outils d&rsquo;orchestration comme <a data-click-id=\"hgr-post-content-link-docker-swarm\" href=\"\/fr\/tutoriels\/comment-creer-docker-swarm\/\">Docker Swarm<\/a> pour r&eacute;partir les conteneurs sur plusieurs serveurs et assurer une haute disponibilit&eacute;, ou Docker Stack pour d&eacute;ployer des applications compos&eacute;es de plusieurs conteneurs en production.<\/li>\n<\/ul><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-points-cles-a-retenir-sur-lutilisation-de-node-js-avec-docker\">Points cl&eacute;s &agrave; retenir sur l&rsquo;utilisation de Node.js avec Docker<\/h2><p class=\"wp-block-paragraph\">En associant Node.js &agrave; Docker, vous b&eacute;n&eacute;ficiez d&rsquo;une m&eacute;thode efficace pour d&eacute;velopper et d&eacute;ployer des applications dont le fonctionnement est coh&eacute;rent d&rsquo;un environnement &agrave; l&rsquo;autre, qui sont portables et qui consomment peu de ressources.<\/p><p class=\"wp-block-paragraph\">Vous avez configur&eacute; un projet, cr&eacute;&eacute; un Dockerfile optimis&eacute; avec une construction multi-&eacute;tapes et appliqu&eacute; les bonnes pratiques pour obtenir un conteneur pr&ecirc;t pour la production.<\/p><p class=\"wp-block-paragraph\">Pour aller plus loin, vous pouvez int&eacute;grer Docker Compose afin de g&eacute;rer des applications compos&eacute;es de plusieurs conteneurs ou mettre en place un pipeline d&rsquo;int&eacute;gration et de d&eacute;ploiement continus (CI\/CD) pour automatiser vos processus de construction.<\/p><p class=\"wp-block-paragraph\">Vous pouvez &eacute;galement utiliser des variables d&rsquo;environnement et des fichiers de secrets pour g&eacute;rer les donn&eacute;es sensibles, ajouter un <a data-click-id=\"hgr-post-content-link-proxy-inverse-comme-nginx\" href=\"\/fr\/tutoriels\/reverse-proxy-nginx\/\">proxy inverse comme NGINX<\/a> pour activer HTTPS, ou publier votre image sur Docker Hub afin de la partager et de la d&eacute;ployer o&ugrave; vous le souhaitez.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js permet de d&eacute;velopper des applications rapides et capables de monter en charge. Pourtant, le fameux &laquo; &ccedil;a fonctionne sur ma machine &raquo; peut vite devenir un casse-t&ecirc;te d&egrave;s que l&rsquo;application quitte votre ordinateur. Les diff&eacute;rences de syst&egrave;me d&rsquo;exploitation, de version de Node.js ou de d&eacute;pendances install&eacute;es peuvent emp&ecirc;cher une application de fonctionner correctement, m&ecirc;me [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/fr\/tutoriels\/utiliser-node-js-avec-docker\/\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":190,"featured_media":53450,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Comment utiliser Node.js avec Docker : guide pratique","rank_math_description":"D\u00e9couvrez comment utiliser Node.js avec Docker pour cr\u00e9er, tester et d\u00e9ployer vos applications, de la configuration au Dockerfile et aux bonnes pratiques.","rank_math_focus_keyword":"comment utiliser node.js avec docker","footnotes":""},"categories":[5883,5845],"tags":[],"class_list":["post-53484","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-applications-preinstallees","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/how-to-use-node-js-with-docker\/","default":0},{"locale":"de-DE","link":"https:\/\/www.hostinger.com\/de\/tutorials\/node-js-mit-docker-verwenden\/","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/how-to-use-node-js-with-docker\/","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/how-to-use-node-js-with-docker\/","default":0},{"locale":"en-GB","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/how-to-use-node-js-with-docker\/","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/how-to-use-node-js-with-docker\/","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/how-to-use-node-js-with-docker\/","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/how-to-use-node-js-with-docker\/","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/how-to-use-node-js-with-docker\/","default":0},{"locale":"fr-FR","link":"https:\/\/www.hostinger.com\/fr\/tutoriels\/utiliser-node-js-avec-docker","default":0}],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/53484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/users\/190"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/comments?post=53484"}],"version-history":[{"count":8,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/53484\/revisions"}],"predecessor-version":[{"id":53584,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/posts\/53484\/revisions\/53584"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/media\/53450"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/media?parent=53484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/categories?post=53484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/fr\/tutoriels\/wp-json\/wp\/v2\/tags?post=53484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}