mirror of
https://github.com/goldbergyoni/nodebestpractices.git
synced 2025-10-27 10:55:55 +08:00
82 lines
2.4 KiB
Markdown
82 lines
2.4 KiB
Markdown
# 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 start`ek 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 `TINI`sarbide gisa.
|
|
|
|
### Kode adibidea: abiarazi aplikazioa Node erabiliz
|
|
|
|
```dockerfile
|
|
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
|
|
|
|
```dockerfile
|
|
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
|
|
|
|
```dockerfile
|
|
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
|
|
|
|
```dockerfile
|
|
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:
|
|
|
|
```console
|
|
$ 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
|