Minimal Node.js docker container
Posted on October 4, 2017 • 1 minutes • 173 words
Bitnami recently releases a prod
version of their bitnami-docker-node
with
much smaller size due to stripping a bunch of unncessary stuff for runtime.
If your app does not require compiling native modules, you can use it as is. No changes required.
However, if you do need to compile native modules, you can still use their
development image as builder and copy stuff over to prod
image after.
I try with one of my app and the final image size reduce from 333 MB down to just 56 MB 💪 !! All these without the sacrify of using alpine-based image.
Please note that this is the size reported by Amazon Cloud Registry so probably compressed size. I don’t build image locally often.
update: the uncompressed size of my app is 707MB before and 192 MB after.
FROM bitnami/node:8.6.0-r1 as builder
RUN mkdir -p /usr/src/app/my-app
WORKDIR /usr/src/app/my-app
COPY package.json /usr/src/app/my-app
RUN npm install --production --unsafe
COPY . /usr/src/app/my-app
FROM bitnami/node:8.6.0-r1-prod
RUN mkdir -p /app/my-app
WORKDIR /app/my-app
COPY --from=builder /usr/src/app/my-app .
EXPOSE 3000
CMD ["npm", "start"]