Dockerfile 1.44 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# Avoid the use of floating tags like: latest, boron, argon and carbon
ARG VERSION=6.12.2
FROM node:$VERSION

LABEL autor="C3SL - Centro de Computação Científica e Software Livre"


# Node was not designed to run as PID 1 (process in docker run with PID 1).
# Its recommended to use the flag --init or use tine to start node process
# in docker

# Add Tini
ENV TINI_VERSION="v0.16.1" WORKSPACE="/home/node/app/"
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)

COPY package*.json $WORKSPACE
21
COPY yarn.lock $WORKSPACE
22 23 24 25 26 27 28
RUN \
    chmod +x /tini &&\
    chown -R node:node $WORKSPACE

USER node
WORKDIR $WORKSPACE

29
RUN yarn install --frozen-lockfile --silent --non-interactive
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

# Bundle app source
# COPY copy files as root so chown must be used
USER root
COPY . .
RUN find . -user root | xargs chown node:node
USER node

VOLUME ["/home/node/app/config"]

EXPOSE 3000

HEALTHCHECK CMD curl -f http://localhost:3000/v1/metrics || exit 1

# Instead of using npm start to start the container, directly put the command
# that npm start executes.
# First off this reduces the number of processes running inside of your container
# Secondly it causes exit signals such as SIGTERM and SIGINT to be received by
# the Node.js process instead of npm swallowing them.


ENTRYPOINT ["/tini", "--"]
CMD ["node", "index" ]