Docker
Kör Simple Node.js-applikation
Sök…
Kör en Basic Node.js-applikation i en behållare
Exemplet jag ska diskutera antar att du har en Docker-installation som fungerar i ditt system och en grundläggande förståelse för hur du arbetar med Node.js. Om du är medveten om hur du måste arbeta med Docker bör det vara uppenbart att Node.js-ramverket inte behöver installeras på ditt system, snarare skulle vi använda den latest
versionen av node
som finns tillgänglig från Docker. Därför om det behövs kan du ladda ner bilden i förväg med kommandot docker pull node
. (Kommandot automatiskt pulls
den senaste versionen av node
bilden från hamnarbetare.)
Fortsätt för att skapa en katalog där alla dina fungerande applikationsfiler finns. Skapa en
package.json
fil i den här katalogen som beskriver din applikation och beroenden. Dinpackage.json
fil ska se ut så här:{ "name": "docker_web_app", "version": "1.0.0", "description": "Node.js on Docker", "author": "First Last <[email protected]>", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.13.3" } }
Om vi behöver arbeta med Node.js skapar vi vanligtvis en
server
som definierar en webbapplikation. I det här fallet använder viExpress.js
ramverket (version4.13.3
framåt). En grundläggandeserver.js
fil ser ut så här:var express = require('express'); var PORT = 8080; var app = express(); app.get('/', function (req, res) { res.send('Hello world\n'); }); app.listen(PORT); console.log('Running on http://localhost:' + PORT);
För dem som är bekanta med Docker skulle du ha stött på en
Dockerfile
. EnDockerfile
är en textfil som innehåller alla kommandon som krävs för att skapa en anpassad bild som är skräddarsydd för din applikation.
Skapa en tom textfil med namnet Dockerfile
i den aktuella katalogen. Metoden för att skapa en är enkel i Windows. I Linux kanske du vill köra touch Dockerfile
i katalogen som innehåller alla filer som krävs för din applikation. Öppna Dockerfile med valfri textredigerare och lägg till följande rader:
FROM node:latest
RUN mkdir -p /usr/src/my_first_app
WORKDIR /usr/src/my_first_app
COPY package.json /usr/src/my_first_app/
RUN npm install
COPY . /usr/src/my_first_app
EXPOSE 8080
FROM node:latest
instruerar Docker-demonen vilken bild vi vill bygga från. I det här fallet använder vi denlatest
versionen av den officiella Docker-node
finns tillgänglig från Docker Hub .Inuti den här bilden fortsätter vi att skapa en fungerande katalog som innehåller alla nödvändiga filer och vi instruerar demonen att ställa in den här katalogen som önskad arbetskatalog för vår applikation. För detta lägger vi till
RUN mkdir -p /usr/src/my_first_app WORKDIR /usr/src/my_first_app
Vi fortsätter sedan med att installera applikationsberoenden genom att först flytta
package.json
filen (som specificerar appinformation inklusive beroenden) till/usr/src/my_first_app
arbetskatalogen i bilden. Vi gör det härCOPY package.json /usr/src/my_first_app/ RUN npm install
Vi skriver sedan
COPY . /usr/src/my_first_app
att lägga till alla applikationsfiler och källkod till arbetskatalogen i bilden.Vi använder sedan
EXPOSE
direktivet för att instruera demonen att synliggöra port8080
för den resulterande behållaren (via en container-till-värd-mappning) eftersom applikationen binds till port8080
.I det sista steget instruerar vi demonet att köra kommandonoden
node server.js
inuti bilden genom att utföra det grundläggandenpm start
. Vi använderCMD
direktivet för detta, som tar kommandona som argument.CMD [ "npm", "start" ]
Vi skapar sedan en
.dockerignore
fil i samma katalog somDockerfile
att förhindra att vår kopia avnode_modules
och loggar som används av vår Node.js-systeminstallation kopieras till Docker-bilden..dockerignore
filen måste ha följande innehåll:node_modules npm-debug.log
Bygg din bild
Navigera till katalogen som innehåller Dockerfile
och kör följande kommando för att bygga Docker-bilden. Flaggan -t
låter dig märka din bild så att det är lättare att hitta senare med kommandot docker images:
$ docker build -t <your username>/node-web-app .
Din bild kommer nu att listas av Docker. Visa bilder med kommandot nedan:
$ docker images
REPOSITORY TAG ID CREATED
node latest 539c0211cd76 10 minutes ago
<your username>/node-web-app latest d64d3505b0d2 1 minute ago
Kör bilden
Vi kan nu köra den bild vi just skapade med hjälp av applikationsinnehållet, Dockerfile
node
och Dockerfile
. Vi fortsätter nu med att köra vår nyskapade <your username>/node-web-app
bild. Att tillhandahålla -d
omkopplare till docker run
kör behållaren i fristående läge, så att behållaren körs i bakgrunden. Flaggan -p
omdirigerar en offentlig hamn till en privat hamn inne i behållaren. Kör den bild du tidigare byggde med det här kommandot:
$ docker run -p 49160:8080 -d <your username>/node-web-app
Skriv ut produktionen från din app genom att köra
docker ps
på din terminal. Utgången ska se ut så här.CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b701693b294 <your username>/node-web-app "npm start" 20 minutes ago Up 48 seconds 0.0.0.0:49160->8080/tcp loving_goldstine
Få applikationsutmatning genom att ange docker logs <CONTAINER ID>
. I detta fall är det docker logs 7b701693b294
.
Utgång: Running on http://localhost:8080
- Från
docker ps
utgång är den erhållna0.0.0.0:49160->8080/tcp
. Därför kartlade Docker8080
porten inuti behållaren till porten 49160 på värdmaskinen. I webbläsaren kan vi nu angelocalhost:49160
.
Vi kan också ringa vår app med hjälp av curl
:
$ curl -i localhost:49160
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
Date: Sun, 08 Jan 2017 14:00:12 GMT
Connection: keep-alive
Hello world