{"id":12728,"date":"2026-06-17T17:27:30","date_gmt":"2026-06-17T10:27:30","guid":{"rendered":"\/de\/tutorials\/?p=12728"},"modified":"2026-06-17T17:27:32","modified_gmt":"2026-06-17T10:27:32","slug":"node-js-mit-docker-verwenden","status":"publish","type":"post","link":"\/de\/tutorials\/node-js-mit-docker-verwenden","title":{"rendered":"Node.js mit Docker verwenden: Schritt-f\u00fcr-Schritt-Anleitung"},"content":{"rendered":"<p>Mit Node.js und Docker k&ouml;nnen Sie <strong>schnelle, skalierbare Anwendungen erstellen und sie in sicheren, ressourcenschonenden Containern bereitstellen<\/strong>.<\/p><p>Diese Kombination bietet erhebliche Vorteile, darunter Portabilit&auml;t &ndash; sodass Ihre App &uuml;berall auf dieselbe Weise ausgef&uuml;hrt wird &ndash; sowie Konsistenz zwischen Entwicklungs- und Produktionsumgebungen.<\/p><p>Wenn Sie Ihre App containerisieren, nutzen Sie Ressourcen effizienter und vereinfachen gleichzeitig den Bereitstellungsprozess.<\/p><p>Im Folgenden zeigen wir Ihnen Schritt f&uuml;r Schritt, wie Sie eine Node.js-Anwendung von Grund auf in Docker einrichten. Sie erfahren au&szlig;erdem, wie Sie ein bestehendes Projekt containerisieren, Ihre containerisierte Anwendung testen und Best Practices f&uuml;r ein produktionsreifes Setup anwenden.<\/p><h2 class=\"wp-block-heading\" id=\"h-prerequisites-for-using-node-js-with-docker\">Voraussetzungen f&uuml;r die Verwendung von Node.js mit Docker<\/h2><p>Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erf&uuml;llt sind:<\/p><ul class=\"wp-block-list\">\n<li><strong>Virtueller privater Server (VPS)<\/strong>. Sie k&ouml;nnen dieser Anleitung zwar auf Ihrem eigenen Rechner folgen, f&uuml;r den Produktivbetrieb Ihrer App ben&ouml;tigen Sie jedoch einen VPS. Der <a href=\"\/de\/vps\">KVM-2-Tarif von Hostinger<\/a> ist ein hervorragender Einstieg f&uuml;r kleine bis mittelgro&szlig;e Projekte und bietet 2 vCPU-Kerne, <strong>8 GB RAM<\/strong> und <strong>100 GB NVMe<\/strong>-Speicher f&uuml;r <strong>\u20ac7.99\/Monat<\/strong>.<\/li>\n\n\n\n<li><strong>Docker wird auf Ihrem System ausgef&uuml;hrt<\/strong>. Hostinger-Kunden k&ouml;nnen <a href=\"\/de\/tutorials\/docker-auf-ubuntu-installieren\">Docker mit nur wenigen Klicks auf ihrem VPS installieren<\/a>, indem sie unsere vorkonfigurierte Vorlage verwenden.<\/li>\n\n\n\n<li><strong>Node.js ist installiert und konfiguriert.<\/strong> Falls Sie dies noch nicht getan haben, folgen Sie unserer Anleitung zur Installation von Node.js und NPM auf Ihrem Ubuntu-Server.<\/li>\n\n\n\n<li><strong>Grundlegende Kenntnisse von Docker-Befehlen.<\/strong> Vertrautheit mit Befehlen wie <strong>docker build<\/strong> und <strong>docker run<\/strong> ist hilfreich, da Sie diese im Terminal h&auml;ufig ausf&uuml;hren werden.<\/li>\n<\/ul><p>\n\n\n<div class=\"protip\">\n                    <h4 class=\"title\">&#128161; Profi-Tipp<\/h4>\n                    <p>Hostinger bietet vorgefertigte Vorlagen sowohl f&uuml;r Docker als auch f&uuml;r Node.js an. Sie k&ouml;nnen jedoch jeweils nur eine Vorlage gleichzeitig installieren. Wir empfehlen, zun&auml;chst Docker mithilfe der Vorlage einzurichten und anschlie&szlig;end Node.js manuell per Befehlen zu installieren, da dieser Einrichtungsprozess einfacher ist.<\/p>\n                <\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"\/de\/vps-server\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/public\" alt=\"\" class=\"wp-image-3556\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.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\" id=\"h-setting-up-a-node-js-app-in-docker\">Einrichten einer Node.js-App in Docker<\/h2><p>Um einen einfachen Node.js-Docker-Container zu erstellen, gehen Sie wie folgt vor. <strong>Zun&auml;chst w&auml;hlen Sie ein Basis-Image aus und zum Schluss f&uuml;hren Sie Ihre erste containerisierte App aus<\/strong>.<\/p><h3 class=\"wp-block-heading\" id=\"h-1-choosing-the-right-node-js-docker-image\">1. Das richtige Node.js-Docker-Image ausw&auml;hlen<\/h3><p>W&auml;hlen Sie zun&auml;chst ein Basis-Image f&uuml;r Ihren Container aus. Das <a href=\"https:\/\/hub.docker.com\/_\/node\" target=\"_blank\" rel=\"noopener\">offizielle Node.js-Docker-Image<\/a> stellt mehrere vorgefertigte Optionen bereit, die f&uuml;r unterschiedliche Anforderungen optimiert sind.<\/p><p>Zu den wichtigsten Typen geh&ouml;ren:<\/p><ul class=\"wp-block-list\">\n<li><strong>Vollst&auml;ndige Bilder<\/strong>. Gr&ouml;&szlig;ere Images, die viele Tools und Bibliotheken enthalten und sich daher gut f&uuml;r Entwicklung und Debugging eignen. Beispiel: <strong>node:24<\/strong>.<\/li>\n\n\n\n<li><strong>Schlanke Images<\/strong>. Leichter als vollst&auml;ndige Images und enth&auml;lt nur die wesentlichen Komponenten, die zum Ausf&uuml;hren von Node.js ben&ouml;tigt werden. Beispiel: <strong>node:24-slim<\/strong>.<\/li>\n\n\n\n<li><strong>Alpine Bilder<\/strong>. &Auml;u&szlig;erst schlanke Images auf Basis von Alpine Linux. Durch ihre geringe Gr&ouml;&szlig;e verringern sie die Angriffsfl&auml;che und sind damit das beste Docker-Image f&uuml;r Node.js in Produktionsumgebungen. Beispiel: <strong>node:24-alpine<\/strong>.<\/li>\n<\/ul><p>F&uuml;r produktive Umgebungen <strong>empfehlen wir, Alpine-Images zu verwenden<\/strong>, damit Ihre Container klein, schnell und sicher bleiben.<\/p><h3 class=\"wp-block-heading\" id=\"h-2-creating-a-basic-node-js-application\">2. Eine einfache Node.js-Anwendung erstellen<\/h3><p>Erstellen Sie als N&auml;chstes eine einfache Node.js-App. &Ouml;ffnen Sie Ihr Terminal und stellen Sie per SSH eine Verbindung zu Ihrem VPS her:<\/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>Hostinger-VPS-Nutzer finden die IP-Adresse ihres Servers in <strong>hPanel &rarr; VPS &rarr; Manage &rarr; Overview &rarr; VPS details<\/strong>.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a33667394b2f\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a33667394b2f\" class=\"aligncenter size-large is-resized wp-lightbox-container\"><img decoding=\"async\" width=\"1136\" height=\"364\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/vps-overview-ipv4-hpanel.png\/public\" alt=\"Die IPv4-Informationen zum VPS in hPanel\" class=\"wp-image-12038\" style=\"width:840px;height:auto\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/vps-overview-ipv4-hpanel.png\/w=1136,fit=scale-down 1136w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/vps-overview-ipv4-hpanel.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/vps-overview-ipv4-hpanel.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/vps-overview-ipv4-hpanel.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1136px) 100vw, 1136px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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>Nachdem Sie sich angemeldet haben, erstellen Sie ein neues Projektverzeichnis und wechseln Sie in dieses Verzeichnis:<\/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>Initialisieren Sie das Projekt mit <strong>npm<\/strong>. Dabei wird eine Datei namens <strong>package.json<\/strong> erzeugt, mit der Sie die Metadaten und Abh&auml;ngigkeiten Ihrer App verwalten.<\/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\":\"6a33667396722\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a33667396722\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-mkdir-cd-npm-init.png\/public\" alt=\"Eine Terminalausgabe nach Ausf&uuml;hrung der Befehle mkdir, cd und npm init\" class=\"wp-image-11898\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-mkdir-cd-npm-init.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-mkdir-cd-npm-init.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/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\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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>Erstellen Sie nun mit einem Texteditor wie nano eine Datei mit dem Namen <strong>app.js<\/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>F&uuml;gen Sie den folgenden Code in die Datei ein. Dieses Skript richtet einen einfachen HTTP-Server ein, der mit &bdquo;Hello, Docker!&ldquo; antwortet:<\/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\":\"6a33667397df8\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a33667397df8\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-nano-app-js.png\/public\" alt=\"Der Inhalt der Datei app.js im Nano-Texteditor\" class=\"wp-image-11899\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-nano-app-js.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-nano-app-js.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/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\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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>Speichern Sie die Datei und beenden Sie <strong>nano<\/strong>, indem Sie <strong>Strg + X &rarr; Y &rarr; Eingabetaste<\/strong> dr&uuml;cken.<\/p><h3 class=\"wp-block-heading\" id=\"h-3-writing-a-simple-dockerfile\">3. Ein einfaches Dockerfile schreiben<\/h3><p>Eine Dockerfile ist eine Textdatei mit Schritt-f&uuml;r-Schritt-Anweisungen zum Erstellen eines Docker-Images. Erstellen Sie im Hauptverzeichnis Ihres Projekts eine Datei mit dem Namen <strong>Dockerfile<\/strong> ohne Erweiterung:<\/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>F&uuml;gen Sie den folgenden Inhalt hinzu. Dies ist ein einfaches Beispiel f&uuml;r eine Node.js-Dockerfile:<\/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=\"\"># Alpine-basiertes Node.js-Image verwenden\nFROM node:24-alpine\n\n# Arbeitsverzeichnis im Container festlegen\nWORKDIR \/app\n\n# package.json und package-lock.json kopieren\nCOPY package*.json .\/\n\n# Anwendungsabh&auml;ngigkeiten installieren\nRUN npm install\n\n# Restlichen Anwendungsquellcode kopieren\nCOPY . .\n\n# Port 3000 f&uuml;r externe Zugriffe freigeben\nEXPOSE 3000\n\n# Befehl zum Starten der Anwendung\nCMD [\"node\", \"app.js\"]<\/pre><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a33667399409\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a33667399409\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-nano-dockerfile.png\/public\" alt=\"Der Inhalt der Datei &bdquo;Dockerfile&ldquo; in der Ansicht des Texteditors nano\" class=\"wp-image-11900\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-nano-dockerfile.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-nano-dockerfile.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/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\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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>Speichern Sie die Datei und schlie&szlig;en Sie sie, wenn Sie fertig sind.<\/p><h3 class=\"wp-block-heading\" id=\"h-4-building-the-image\">4. Erstellen des Images<\/h3><p>Nachdem Sie die Dockerfile erstellt haben, bauen Sie Ihr Docker-Image, indem Sie in dem Projektverzeichnis diesen Befehl ausf&uuml;hren:<\/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>Der Schalter <strong>-t<\/strong> versieht das Image mit dem Namen <strong>node-docker-app<\/strong>. Wenn der Build erfolgreich abgeschlossen ist, zeigt Docker eine Best&auml;tigungsnachricht an.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a3366739aa26\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a3366739aa26\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-docker-build.png\/public\" alt=\"Eine Terminalausgabe nach Ausf&uuml;hrung des Befehls `docker build`\" class=\"wp-image-11901\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-docker-build.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-docker-build.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/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\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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\" id=\"h-5-running-the-container\">5. Den Container ausf&uuml;hren<\/h3><p>Sobald das Image erstellt ist, f&uuml;hren Sie Node.js in einem Docker-Container mit diesem Befehl aus:<\/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>Der Parameter <strong>-p 3000:3000<\/strong> ordnet Port <strong>3000<\/strong> auf Ihrem Server Port <strong>3000<\/strong> im Container zu, w&auml;hrend der Parameter <strong>-d<\/strong> den Container im Detached-Modus (also im Hintergrund) ausf&uuml;hrt.<\/p><p>&Ouml;ffnen Sie Ihren Browser und gehen Sie zu <strong>http:\/\/your_vps_ip:3000<\/strong>, um zu &uuml;berpr&uuml;fen, ob es funktioniert. Sie sollten die Meldung &bdquo;Hello, Docker!&ldquo; sehen.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a3366739c20b\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a3366739c20b\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/browser-hello-docker.png\/public\" alt=\"Die Meldung &bdquo;Hello Docker&ldquo; im Browser\" class=\"wp-image-11925\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/browser-hello-docker.png\/w=830,fit=scale-down 830w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/browser-hello-docker.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/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\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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>Nachdem Sie nun eine einfache Anwendung erstellt und ausgef&uuml;hrt haben, sehen wir uns an, wie Sie eine komplexere Node.js-App dockerisieren.<\/p><h2 class=\"wp-block-heading\" id=\"h-containerizing-an-existing-node-js-application\">Eine bestehende Node.js-Anwendung containerisieren<\/h2><p>Um ein bestehendes Node.js-Projekt zu containerisieren, <strong>bereiten Sie Ihre App vor, erstellen Sie eine Ignore-Datei, um das Image schlank zu halten, und schreiben Sie ein optimiertes Dockerfile<\/strong>.<\/p><h3 class=\"wp-block-heading\" id=\"h-1-preparing-the-application-for-docker\">1. Die Anwendung f&uuml;r Docker vorbereiten<\/h3><p>Bevor Sie beginnen, stellen Sie sicher, dass Ihr bestehendes Projekt f&uuml;r die Containerisierung bereit ist.<\/p><ul class=\"wp-block-list\">\n<li><strong>&Uuml;berpr&uuml;fen Sie die Datei package.json<\/strong>. Stellen Sie sicher, dass alle Abh&auml;ngigkeiten korrekt aufgef&uuml;hrt sind und ein <strong>Startskript<\/strong> zum Starten der App enthalten ist.<\/li>\n\n\n\n<li><strong>Abh&auml;ngigkeiten sperren<\/strong>. F&uuml;hren Sie <strong>npm install<\/strong> aus, um die Datei <strong>package-lock.json<\/strong> zu erstellen oder zu aktualisieren. Dies garantiert in allen Umgebungen konsistente Versionen der Abh&auml;ngigkeiten.<\/li>\n\n\n\n<li><strong>Testen Sie lokal<\/strong>. F&uuml;hren Sie auf Ihrem Rechner den Befehl <strong>npm start<\/strong> aus, um zu &uuml;berpr&uuml;fen, ob alles wie erwartet funktioniert, bevor Sie fortfahren.<\/li>\n<\/ul><h3 class=\"wp-block-heading\" id=\"h-2-creating-a-dockerignore-file\">2. Erstellen einer .dockerignore-Datei<\/h3><p>Eine <strong>.dockerignore<\/strong> -Datei verhindert, dass bestimmte Dateien und Verzeichnisse in Ihr Docker-Image kopiert werden. Dadurch bleibt das Bild klein und gesch&uuml;tzt.<\/p><p>Erstellen Sie im Projektstammverzeichnis mit <strong>nano<\/strong> eine Datei mit dem Namen <strong>.dockerignore<\/strong> und f&uuml;gen Sie den folgenden Inhalt ein:<\/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>Diese Datei schlie&szlig;t Folgendes aus:<\/p><ul class=\"wp-block-list\">\n<li><strong>node_modules<\/strong>. Der Container installiert die Abh&auml;ngigkeiten, sodass Sie den lokalen Ordner nicht ben&ouml;tigen.<\/li>\n\n\n\n<li><strong>npm-debug.log<\/strong>, <strong>logs\/<\/strong>, <strong>tmp\/<\/strong>. Protokolle und tempor&auml;re Dateien, die in der Produktion nicht ben&ouml;tigt werden.<strong>env<\/strong>. Enth&auml;lt vertrauliche Schl&uuml;ssel und darf niemals in ein Bild eingef&uuml;gt werden.<\/li>\n\n\n\n<li><strong>dist\/<\/strong>, <strong>coverage\/<\/strong>. Build-Artefakte und Testberichte, die nicht ben&ouml;tigt werden, um die App auszuf&uuml;hren.<\/li>\n<\/ul><p>\n\n\n<div class=\"protip\">\n                    <h4 class=\"title\">&#128161; Profi-Tipp<\/h4>\n                    <p>&Uuml;berpr&uuml;fen Sie Ihre Datei <strong>.dockerignore<\/strong> regelm&auml;&szlig;ig, damit sie stets zu Ihrem Projekt passt. Schlie&szlig;en Sie stets sensible Informationen wie API-Schl&uuml;ssel und Zugangsdaten aus.<\/p>\n                <\/div>\n\n\n\n<\/p><h3 class=\"wp-block-heading\" id=\"h-3-writing-a-production-ready-dockerfile\">3. Ein produktionsreifes Dockerfile schreiben<\/h3><p>Eine produktionsreife Dockerfile optimiert Ihre Anwendung in Bezug auf Sicherheit und Leistung. Es verwendet ein minimales Basis-Image, installiert nur Produktionsabh&auml;ngigkeiten und setzt die richtigen Umgebungsvariablen.<\/p><p>Hier ein Beispiel:<\/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=\"\"># Leichtgewichtiges Node.js-Basis-Image verwenden\nFROM node:24-alpine\n\n# Arbeitsverzeichnis festlegen\nWORKDIR \/usr\/src\/app\n\n# Paketdateien kopieren und nur Produktionsabh&auml;ngigkeiten installieren\nCOPY package*.json .\/\nRUN npm ci --omit=dev\n\n# Anwendungsdateien kopieren\nCOPY . .\n\n# Umgebungsvariablen f&uuml;r die Produktionsumgebung festlegen\nENV NODE_ENV=production\n\n# Anwendungsport freigeben\nEXPOSE 3000\n\n# Befehl zum Starten der Anwendung\nCMD [\"node\", \"app.js\"]<\/pre><p>Jede Anweisung in der Dockerfile hat einen bestimmten Zweck:<\/p><figure tabindex=\"0\" class=\"wp-block-table\"><table><tbody><tr><td><strong>Befehl<\/strong><\/td><td><strong>Zweck<\/strong><\/td><\/tr><tr><td>FROM node:24-alpine<\/td><td>Verwendet ein minimales Node.js-Basis-Image.<\/td><\/tr><tr><td>WORKDIR \/usr\/src\/app<\/td><td>Legt das Arbeitsverzeichnis f&uuml;r nachfolgende Befehle fest.<\/td><\/tr><tr><td>COPY package*.json .\/<\/td><td>Kopiert die Dateien f&uuml;r die Abh&auml;ngigkeitsverwaltung in den Container.<\/td><\/tr><tr><td>RUN npm ci &ndash;omit=dev<\/td><td>Installiert nur Produktionsabh&auml;ngigkeiten, um die Gr&ouml;&szlig;e des Images zu reduzieren.<\/td><\/tr><tr><td>COPY . .<\/td><td>Kopiert den restlichen Quellcode der Anwendung.<\/td><\/tr><tr><td>ENV NODE_ENV=production<\/td><td>Konfiguriert die Anwendung f&uuml;r den Betrieb in der Produktionsumgebung, um die Leistung zu verbessern.<\/td><\/tr><tr><td>EXPOSE 3000<\/td><td>Dokumentiert, dass der Container auf Port 3000 lauscht.<\/td><\/tr><tr><td>CMD [&ldquo;node&rdquo;, &ldquo;app.js&rdquo;]<\/td><td>Legt den Standardbefehl fest, der beim Start des Containers ausgef&uuml;hrt wird.<\/td><\/tr><\/tbody><\/table><\/figure><h3 class=\"wp-block-heading\" id=\"h-4-optimizing-with-multi-stage-builds\">4. Optimierung mit mehrstufigen Builds<\/h3><p>F&uuml;r Apps, die einen Build-Schritt ben&ouml;tigen, etwa das Transpilieren von TypeScript oder das B&uuml;ndeln mit Webpack, eignet sich ein mehrstufiges Dockerfile f&uuml;r Node.js am besten.<\/p><p>Bei dieser Technik wird die Build-Umgebung von der sp&auml;teren Laufzeitumgebung getrennt, was zu einem deutlich kleineren Produktions-Image f&uuml;hrt.<\/p><p>Ein Multi-Stage-Build verwendet mehrere <strong>FROM<\/strong> -Anweisungen. Die erste Phase erstellt die App und ihre Assets, und die zweite Phase kopiert nur die ben&ouml;tigten Build-Dateien in ein sauberes Image.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a3366739dccb\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a3366739dccb\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/06\/mehrstufiger-Docker-Build-fur-Nodejs.png\/public\" alt=\"Das Diagramm zum mehrstufigen Docker-Build f&uuml;r Node.js\" class=\"wp-image-12594\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/06\/mehrstufiger-Docker-Build-fur-Nodejs.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/06\/mehrstufiger-Docker-Build-fur-Nodejs.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/06\/mehrstufiger-Docker-Build-fur-Nodejs.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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>Im Folgenden sehen Sie ein Beispiel f&uuml;r ein mehrstufiges Dockerfile:<\/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=\"\"># Phase 1: Anwendung erstellen\nFROM node:24-alpine AS builder\nWORKDIR \/usr\/src\/app\nCOPY package*.json .\/\nRUN npm install\nCOPY . .\nRUN npm run build\n\n# Phase 2: Produktions-Image erstellen\nFROM node:24-alpine\nWORKDIR \/usr\/src\/app\n\n# Erstellte Dateien und Produktionsabh&auml;ngigkeiten kopieren\nCOPY --from=builder \/usr\/src\/app\/dist .\/dist\nCOPY package*.json .\/\nRUN npm ci --omit=dev\n\n# Umgebungsvariablen festlegen\nENV NODE_ENV=production\n\n# Anwendungsport freigeben\nEXPOSE 3000\n\n# Anwendung starten\nCMD [\"node\", \"dist\/app.js\"]<\/pre><p>Mit diesem Ansatz entsteht ein finales Image, das nur das enth&auml;lt, was zum Ausf&uuml;hren der App erforderlich ist &ndash; und dadurch kleiner, schneller und sicherer ist.<\/p><p>Nachdem Sie Ihre optimierte Dockerfile erstellt haben, bauen und starten Sie das Image mit denselben Befehlen <strong>docker build<\/strong> und <strong>docker run<\/strong> wie zuvor. Jetzt sind Sie bereit, Ihren Container zu testen.<\/p><h2 class=\"wp-block-heading\" id=\"h-testing-your-node-js-docker-container\">Testen Ihres Node.js-Docker-Containers<\/h2><p>Sobald Ihre Node.js-App in einem Container ausgef&uuml;hrt wird, m&uuml;ssen Sie sie testen, um sicherzustellen, dass sie sich in einer produktions&auml;hnlichen Umgebung wie erwartet verh&auml;lt.<\/p><p>Beginnen Sie, indem Sie eine Anfrage mit curl oder einem Webbrowser stellen. F&uuml;hren Sie in Ihrem Terminal Folgendes aus:<\/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>Dieser Befehl sollte die Meldung &bdquo;Hello, Docker!&ldquo; zur&uuml;ckgeben.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6a3366739f409\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a3366739f409\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-curl.png\/public\" alt=\"Eine Terminalausgabe nach Ausf&uuml;hren des curl-Befehls\" class=\"wp-image-11927\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-curl.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-curl.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-curl.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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>&Uuml;berpr&uuml;fen Sie anschlie&szlig;end die Container-Logs, um das Verhalten zu &uuml;berwachen und Probleme zu diagnostizieren:<\/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\":\"6a336673a0907\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6a336673a0907\" 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-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-docker-protokolle.png\/public\" alt=\"Eine Terminalausgabe nach Ausf&uuml;hrung des Befehls `docker logs`\" class=\"wp-image-11905\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-docker-protokolle.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-docker-protokolle.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/05\/terminal-docker-protokolle.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\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>Wenn Sie die Container-ID nicht kennen, listen Sie die aktiven Container mit folgendem Befehl auf:<\/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>F&uuml;r interaktives Debugging &ouml;ffnen Sie eine Shell im laufenden Container mit docker exec:<\/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>Damit k&ouml;nnen Sie das Dateisystem des Containers erkunden und Probleme direkt beheben.<\/p><p>Wenn bei der Ausf&uuml;hrung von Docker-Befehlen Berechtigungsprobleme auftreten, folgen Sie unserer Anleitung dazu, wie Sie den Fehler <a href=\"\/de\/tutorials\/docker-permission-denied-fehler-beheben\">Docker permission denied beheben<\/a>.<\/p><p>F&uuml;gen Sie abschlie&szlig;end eine Statuspr&uuml;fung hinzu. Dabei handelt es sich um einen leichtgewichtigen Endpoint (zum Beispiel <strong>\/health<\/strong>), der den Status Ihrer App meldet. Konfigurieren Sie Docker so, dass dieser Endpunkt in regelm&auml;&szlig;igen Abst&auml;nden angepingt wird, um zu best&auml;tigen, dass der Container ordnungsgem&auml;&szlig; l&auml;uft, und dass er automatisch neu gestartet wird, falls er ausf&auml;llt.<\/p><p>Nachdem Ihr Container vollst&auml;ndig getestet ist, k&ouml;nnen Sie nun Best Practices anwenden, um ihn effizient und produktionsbereit zu halten.<\/p><h2 class=\"wp-block-heading\" id=\"h-what-are-some-best-practices-for-using-node-js-with-docker\">Was sind bew&auml;hrte Vorgehensweisen f&uuml;r die Verwendung von Node.js mit Docker?<\/h2><p>Wenn Sie bew&auml;hrte Methoden befolgen, erstellen Sie sichere, effiziente und gut wartbare Docker-Images f&uuml;r Ihre Node.js-Apps. Hier sind einige wichtige Tipps, die Sie anwenden sollten:<\/p><ul class=\"wp-block-list\">\n<li><strong>Verwenden Sie schlanke Basis-Images<\/strong>. Verwenden Sie in der Produktion Alpine- oder Slim-Images statt vollst&auml;ndiger Images. Kleinere Images werden schneller erstellt und bieten eine geringere Angriffsfl&auml;che.<\/li>\n\n\n\n<li><strong>Nur Produktionsabh&auml;ngigkeiten installieren<\/strong>. Verwenden Sie in Ihrer Dockerfile den Befehl <strong>npm ci &ndash;omit=dev<\/strong>. So vermeiden Sie die Installation von Entwicklungsabh&auml;ngigkeiten wie Testbibliotheken, die im endg&uuml;ltigen Image nicht ben&ouml;tigt werden und dazu beitragen, es klein zu halten.<\/li>\n\n\n\n<li><strong>Setzen Sie NODE_ENV=production<\/strong>. Diese Umgebungsvariable signalisiert Bibliotheken wie Express, Optimierungen zu aktivieren, etwa das Caching von View-Templates und die Verringerung des Debug-Overheads.<\/li>\n\n\n\n<li><strong>Bilder klein halten<\/strong>. Verwenden Sie Multi-Stage-Builds, um Build-Werkzeuge von der Laufzeitumgebung zu trennen. F&uuml;gen Sie eine Datei <strong>.dockerignore<\/strong> hinzu, um Protokolle, lokale Module und andere unn&ouml;tige Dateien aus dem Build-Kontext auszuschlie&szlig;en.<\/li>\n\n\n\n<li><strong>Aktualisieren Sie Basis-Images regelm&auml;&szlig;ig<\/strong>. Ziehen Sie regelm&auml;&szlig;ig das neueste Basis-Image und erstellen Sie Ihr App-Image neu, damit Sicherheitsupdates und Leistungsverbesserungen enthalten sind.<\/li>\n\n\n\n<li><strong>Als Nicht-Root-Benutzer ausf&uuml;hren<\/strong>. F&uuml;r mehr Sicherheit sollten Sie Ihre App im Container nicht mit Root-Rechten ausf&uuml;hren. Erstellen Sie stattdessen in Ihrer Dockerfile einen eigenen Benutzer und wechseln Sie zu diesem, bevor Sie die Anwendung ausf&uuml;hren.<\/li>\n\n\n\n<li><strong>Skalieren Sie Ihre App<\/strong>. Verwenden Sie Orchestrierungs-Tools wie <a href=\"\/de\/tutorials\/docker-swarm-erstellen\">Docker Swarm<\/a>, um Container f&uuml;r hohe Verf&uuml;gbarkeit &uuml;ber mehrere Server zu verteilen, oder <a href=\"\/de\/tutorials\/docker-stack-bereitstellen\">Docker stack<\/a>, um Multi-Container-Anwendungen in der Produktion bereitzustellen.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-key-takeaways-for-using-node-js-with-docker\">Wichtige Erkenntnisse zur Verwendung von Node.js mit Docker<\/h2><p>Durch die Kombination von Node.js mit Docker entsteht ein leistungsf&auml;higer Workflow f&uuml;r die Entwicklung und Bereitstellung von Anwendungen, die konsistent, portabel und effizient sind.<\/p><p>Sie haben ein Projekt eingerichtet, ein optimiertes Dockerfile mit Multi-Stage-Builds geschrieben und Best Practices angewendet, um einen produktionsreifen Container zu erstellen.<\/p><p>Der n&auml;chste Schritt besteht darin, weiter zu experimentieren. Docker Compose integrieren, um Multi-Container-Anwendungen zu verwalten, oder eine Pipeline f&uuml;r Continuous Integration und Deployment (CI\/CD) einrichten, um Ihre Builds zu automatisieren.<\/p><p>Sie k&ouml;nnen au&szlig;erdem Umgebungsvariablen und geheime Dateien verwenden, um vertrauliche Daten zu verwalten, einen Reverse-Proxy wie NGINX hinzuf&uuml;gen, um HTTPS zu aktivieren, oder Ihr Image zu Docker Hub pushen, um es &uuml;berall freizugeben und bereitzustellen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit Node.js und Docker k&ouml;nnen Sie schnelle, skalierbare Anwendungen erstellen und sie in sicheren, ressourcenschonenden Containern bereitstellen. Diese Kombination bietet erhebliche Vorteile, darunter Portabilit&auml;t &ndash; sodass Ihre App &uuml;berall auf dieselbe Weise ausgef&uuml;hrt wird &ndash; sowie Konsistenz zwischen Entwicklungs- und Produktionsumgebungen. Wenn Sie Ihre App containerisieren, nutzen Sie Ressourcen effizienter und vereinfachen gleichzeitig den Bereitstellungsprozess. [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/de\/tutorials\/node-js-mit-docker-verwenden\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":190,"featured_media":12727,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Node.js mit Docker: Container erstellen und ausf\u00fchren","rank_math_description":"Erfahren Sie, wie Sie eine Node.js-Anwendung mit Docker containerisieren, Docker-Images erstellen und Container f\u00fcr die Produktion bereitstellen.","rank_math_focus_keyword":"Node.js mit Docker","footnotes":""},"categories":[25],"tags":[],"class_list":["post-12728","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/12728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/users\/190"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/comments?post=12728"}],"version-history":[{"count":4,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/12728\/revisions"}],"predecessor-version":[{"id":12745,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/12728\/revisions\/12745"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/media\/12727"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/media?parent=12728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/categories?post=12728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/tags?post=12728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}