Skip to main content

Abiarazi edukiontzia node komandoa erabiliz npm erabili ordez

Azalpena

Ohikoa da jendeak CMD 'npm start' erabiltzea bere aplikazioa abiarazteko kodea egitea. Praktika txarra da hori, ordea. npm bitarrak ez du seinalerik birbidaliko zure aplikaziora, aplikazioa behar bezala ixtea eragozten duena (ikus [/sections/docker/graceful-shutdown.basque.md]). Bigarren mailako prozesuak erabiltzen badituzu, ez dira behar bezala garbituko ustekabeko itzaltzeren bat gertatzen bada, prozesu zonbiak utziko dituena. npm startek ere onuragarria ez den prozesu bat gehiago egiten du. Erabili CMD ['node','server.js'] zure aplikazioa abiarazteko. Zure aplikazioak bigarren mailako prozesuak baditu, erabili gainera TINIsarbide gisa.

Kode adibidea: abiarazi aplikazioa Node erabiliz

FROM node:12-slim AS build

WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm ci --production && npm clean cache --force

CMD ["node", "server.js"]

Kode adibidea: erabili Tiny sarbide gisa

FROM node:12-slim AS build

# Gehitu Tini bigarren mailako prozesuak erabiltzen badituzu
ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini

WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm ci --production && npm clean cache --force

ENTRYPOINT ["/tini", "--"]

CMD ["node", "server.js"]

Anti ereduak

npm start erabiliz

FROM node:12-slim AS build

WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm ci --production && npm clean cache --force

# ez egin hau!
CMD "npm start"

Node string bakarrean erabiltzeak zure komandoa egikaritzeko bash/ash shell prozesu bat abiaraziko du. Hori ia npm erabiltzea modukoa da

FROM node:12-slim AS build

WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm ci --production && npm clean cache --force

# ez egin hau, bash abiatuko du eta
CMD "node server.js"

npmrekin abiatuz, hau da prozesuaren zuhaitza:

$ ps falx
UID PID PPID COMMAND
0 1 0 npm
0 16 1 sh -c node server.js
0 17 16 \_ node server.js

Bi prozesu estra hauek edukitzeak ez du inongo abantailarik ekartzen

Iturriak:

https://maximorlov.com/process-signals-inside-docker-containers/

https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#handling-kernel-signals