Is it possible to build nodeJS container based on SCRATCH reference?

3/18/2021

My requirement is to optimize and secure base image for nodeJS. I have tried building it on SCRATCH using multistage docker but the final container getting into crashed state.

Looking for a sample docker file working on SCRATCH base.

-- Mujahid Islam
docker
kubernetes
nodes

1 Answer

3/18/2021

It's very much possible to build NodeJS applications on docker scratch image. Commands on the Scratch needs to be thoroughly verified by pointing to right path for node executable, if not it will result in crash as there will be no command line interface on scratch base.

Here is the dockerfile for sample NodeJS todo application and git reference.

FROM siva094/node-scratch-static:1 as buildnode
#########################
#### Source code  ########
########################
FROM alpine/git as codecheckout
WORKDIR /app
RUN git clone https://github.com/siva094/nodejs-todo.git
######################
#### Code Build #####
####################
FROM node:10-alpine as sourcecode
WORKDIR /app
COPY  --from=codecheckout /app/nodejs-todo/ ./
RUN npm install --prod
###################
#### Target APP ###
##################
FROM scratch
COPY --from=buildnode /node/out/Release/node /node
COPY --from=sourcecode /app ./
ENV PATH "$PATH:/node"
EXPOSE 3000
ENTRYPOINT ["/node", "index.js"]

Git Reference - https://github.com/siva094/nodejs-todo

Docker References:

NodeJS fully static build and NodeJS todo app

 docker pull siva094/node-fullystatic
 docker pull siva094/nodejs-scratch-todo

Adding reference for building a static node.

source code URL - github.com/siva094/Dockers/blob/master/Dockerfile

FROM node:latest as builder
RUN apk --no-cache add --virtual native-deps \
  g++ gcc libgcc libstdc++ linux-headers autoconf automake make nasm python git && \
  npm install --quiet node-gyp -g
RUN npm install --quiet node-gyp -g
RUN git clone https://github.com/nodejs/node && \
    cd node && \
    ./configure --fully-static --enable-static && \
    make

FROM scratch
COPY --from=builder /node/out/Release/node /node
-- Siva Pilli
Source: StackOverflow