Paano Mag-Dockerize ng Node.js Application

Paano Mag Dockerize Ng Node Js Application



Kasama sa pag-docker ng isang application ang pagtukoy sa lahat ng mga kinakailangan upang maisagawa ang application at pagkatapos ay gamitin ang Dockerfile upang bumuo ng isang espesyal na imahe ng Docker na maaaring ibahagi sa iba't ibang mga makina. Pag-docker ng ' Node.js ” pinahuhusay ng application ang pagkakapare-pareho, at tinitiyak ang maginhawang pag-debug sa dulo ng developer.

Mga kinakailangan







Ang mga kinakailangan para sa dockerizing isang ' Node.js 'Ang aplikasyon ay kinabibilangan ng mga sumusunod:



  • Pag-install ng Docker.
  • Pangunahing Pag-unawa sa Application ng Node.js.

Paano i-dockerize ang isang Node.js Application?

isang ' Node.js 'Maaaring i-dockerize ang application sa pamamagitan ng mga sumusunod na hakbang:



Hakbang 1: Gumawa ng “package.json” File





Una, gumawa ng bagong direktoryo kung saan ang lahat ng mga file ay bubuuin. Sa loob ng direktoryong ito, lumikha ng ' package.json ” file na kumakatawan sa app kasama ang mga dependency nito:

{
'pangalan' : 'docker_web_app' ,
'bersyon' : '1.0.0' ,
'paglalarawan' : 'Node.js sa Docker' ,
'may-akda' : 'Una huli ' ,
'pangunahing' : 'server.js' ,
'mga script' : {
'simulan' : 'node server.js'
} ,
'mga dependency' : {
'express' : '^4.18.2'
} }



Hakbang 2: Bumuo ng 'package-lock.json' na File

Sa loob ng “package.json” file, isagawa ang “ pag-install ng npm ” cmdlet. Ito ay bubuo ng ' package-lock.json ” file na kinopya sa imahe ng Docker, tulad ng sumusunod:

npm i-install

Hakbang 3: Gumawa ng Server

Pagkatapos nito, lumikha ng ' server.js ” file na nagdedeklara ng isang web app na gumagamit ng “ Express.js ” balangkas:

'gumamit ng mahigpit' ;

const express = nangangailangan ( 'express' ) ;

const PORT = 8080 ;
const HOST = '0.0.0.0' ;

const app = express ( ) ;
app.get ( '/' , ( req, res ) = > {
res.send ( 'Hello World' ) ;
} ) ;

app.makinig ( PORT, HOST, ( ) = > {
console.log ( ` Tumatakbo sa http: // ${HOST} : ${PORT} ` ) ;
} ) ;

Ngayon, lumipat tayo sa mga pamamaraan upang maisagawa ang aplikasyon sa loob ng isang lalagyan ng Docker sa pamamagitan ng isang opisyal na imahe ng Docker.

Hakbang 4: Gumawa ng Dockerfile

Gumawa ng Dockerfile nang manu-mano sa loob ng parehong direktoryo na binubuo ng lahat ng mga file. Sa file na ito, isulat ang sumusunod na linya ng code:

MULA sa node: 18
WORKDIR / usr / src / app
Kopyahin ang pakete * .json . /
TAKBO ang npm i-install
KOPYA . .
EXPOSE 8080
CMD [ 'node' , 'server.js' ]

Sa snippet ng code sa itaas, ilapat ang mga hakbang na ibinigay sa ibaba:

  • Una, gamitin ang pinakabagong pangmatagalang bersyon ng suporta 18 ng node bilang isang batayang larawang nakapaloob sa Docker Hub .
  • Pagkatapos nito, lumikha ng isang direktoryo upang maglaman ng code ng app sa larawan.
  • Ito ay kumakatawan sa gumaganang direktoryo para sa application.
  • Ngayon, i-install ang mga dependency ng app sa pamamagitan ng “ npm ”.
  • Tandaan: Kung ginagamit ang npm na bersyon 4 o mas maaga, hindi gagawa ng 'package-lock.json' na file.
  • Ngayon, kopyahin ang ' package.json ” file. Gayundin, i-bundle ang source code ng app sa loob ng Docker image sa pamamagitan ng ' KOPYA ” pagtuturo.
  • Gamitin ang ' EXPOSE ” tagubilin upang hayaan ang app na mag-bind sa port 8080.
  • Panghuli, tukuyin ang cmdlet upang maisagawa ang application sa pamamagitan ng CMD na tumutukoy sa runtime. Dito, ang ' node server.js ” Ang cmdlet ay gagamitin upang simulan ang server.

Hakbang 5: Gumawa ng '.dockerignore' na File

Gumawa ng '.dockerignore' na file sa ' Dockerfile ” direktoryo/folder na binubuo ng nilalaman na ibinigay sa ibaba:

node_modules
npm-debug.log

Iniiwasan ng content na ito ang mga lokal na module at mga debug log, ayon sa pagkakabanggit, na makopya sa imahe ng Docker.

Hakbang 6: Buuin ang Imahe

Ngayon, sa loob ng direktoryo na binubuo ng Dockerfile, buuin ang imahe gamit ang nakasaad sa ibaba na cmdlet:

build ng docker. -t nodejs / node-web-app

Sa cmdlet na ito, ' nodejs ' ay tumutukoy sa pangalan ng direktoryo kaya tukuyin ang cmdlet nang naaayon at ang ' -t ” itina-tag ng bandila ang larawan.

Ngayon, ilista ang mga imahe sa pamamagitan ng command na ito:

mga larawan ng docker

Hakbang 7: Patakbuhin ang Imahe

Isagawa/patakbuhin ang imahe gamit ang nakasaad sa ibaba na cmdlet:

tumakbo sa pantalan -p 49160 : 8080 -d nodejs / node-web-app

Dito, ang ' -p Ang ” flag ay nagre-redirect ng isang pampublikong port sa isang pribado sa loob ng lalagyan at ang “ -d ” ipapatupad ng flag ang container sa detached mode, ibig sabihin, sa background.

Hakbang 8: Bumuo ng Output ng App

Ngayon, i-print ang output ng application gamit ang mga sumusunod na command:

docker ps
docker logs 77b1e3c8576e

Kung may pangangailangang mag-navigate sa loob ng container shell, gamitin ang ' exec ” cmdlet:

docker exec -ito 77b1e3c8576e / bin / bash

Dito,' 77b1e3c8576e Ang ” ay kumakatawan sa ID ng container na maaaring kopyahin sa pamamagitan ng pinaandar na “ docker ps ” utos kanina.

Hakbang 9: Pagsubok sa Application

Para sa pagsubok sa application, kunin ang port ng app na na-map ng Docker:

docker ps

Sa cmdlet sa itaas, na-map ng Docker ang ' 8080 'port sa loob ng lalagyan patungo sa port' 49160 ” sa makina.

Hakbang 10: Pag-invoke sa Application

I-invoke ang application sa pamamagitan ng “ kulot ” cmdlet sa pamamagitan ng pagtukoy sa port na naka-map sa itaas at paglalagay ng mga kinakailangang halaga:

kulot -i localhost: 49160

Hakbang 11: Isara/Patayin ang Application

Panghuli, isara ang application sa pamamagitan ng “ pumatay ” cmdlet:

docker pumatay 77b1e3c8576e

Gayundin, kumpirmahin kung ang application ay huminto sa pamamagitan ng command na ito na may mga halaga ng input:

kulot -i localhost: 49160

Konklusyon

isang ' Node.js ” application ay maaaring i-dockerize sa pamamagitan ng paglikha ng isang server, isang dockerfile, ang '.dockerignore' na file, pagbuo at pagpapatakbo ng imahe, pagbuo ng output ng app, at pagsubok, pagsasara, at pagkumpirma sa paghinto ng application. Ang artikulong ito ay nagpapaliwanag sa pag-docker ng isang Node.js application.