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.
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