Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to shrink size of Docker image with NodeJs

I created new Angular2 app by angular-cli and run it in Docker.

At first I init app on my local machine:

ng new project && cd project &&  "put my Dockerfile there" && docker build -t my-ui && docker run.

My Dockerfile

FROM node

RUN npm install -g [email protected] && npm cache clean && rm -rf ~/.npm

RUN mkdir -p /opt/client-ui/src
WORKDIR /opt/client-ui  

COPY package.json /opt/client-ui/
COPY angular-cli.json /opt/client-ui/
COPY tslint.json /opt/client-ui/

ADD src/ /opt/client-ui/src

RUN npm install
RUN ng build --prod --aot

EXPOSE 4200

ENV PATH="$PATH:/usr/local/bin/"    
CMD ["npm", "start"]

Everything is OK, problem is size of image: 939MB!!! I tried to use FROM: ubuntu:16.04 and install NodeJs on it (it works), but still my image has ~450 MB. I know that node:alpine exists, but I am not able to install angular-cli in it.

How can I shrink image size? Is it necessary to run "npm install" and "ng build" in Dockerfile? I would expect to build app on localhost and copy it to image. I tried to copy dist dir and and package.json etc files, but it does not work (app start fail). Thanks.

like image 956
jiri463 Avatar asked Jan 05 '17 13:01

jiri463


People also ask

How big is a NodeJS Docker image?

js version 18.2. 0. The Node. js Docker image size is 952MB.

Can we compress Docker image?

docker images are compressed by default. you will notice when running docker pull , where it will download the needed images\layers and then extract\decompress them. there is no need for you to compress the files within your docker images.


1 Answers

You can certainly use my alpine-ng image if you like.

You can also check out the dockerfile, if you want to try and modify it in some way.

I regret to inform you that even based on alpine, it is still 610MB. An improvement to be sure, but there is no getting around the fact that the angular compiler is grossly huge.

like image 107
trey-jones Avatar answered Oct 05 '22 23:10

trey-jones