So I got the answer based on tkausl and David Maze's comments (thanks guys!) .
The node_modules inside the image is generated from the Dockerfile 'npm install' step.
And as for the question:
if
.dockerignoredoes not includenode_modules, Dockerfile would have overwrittennode_modulesanyway? So why bother to putnode_modulesinside the .dockerignore file?
the comment I received was that if I left out the node_modules from the .dockerignore file, then the docker build process would have slowed down due to unnecessary copying of the node_modules, PLUS the image would have been larger.
Therefore, the prudent thing is to keep node_modules inside .dockerignore file to achieve more efficiency in the docker build process.
UPDATE: I did try to run the scenario with the node_modules removed from .dockerignore file, and the image is showing 940MB, whereas creating the image with node_modules inside the .dockerignore file - though the process may be more efficient - the output image is 942MB (2MB larger).
So I got the answer based on tkausl and David Maze's comments (thanks guys!) .
The node_modules inside the image is generated from the Dockerfile 'npm install' step.
And as for the question:
if
.dockerignoredoes not includenode_modules, Dockerfile would have overwrittennode_modulesanyway? So why bother to putnode_modulesinside the .dockerignore file?
the comment I received was that if I left out the node_modules from the .dockerignore file, then the docker build process would have slowed down due to unnecessary copying of the node_modules, PLUS the image would have been larger.
Therefore, the prudent thing is to keep node_modules inside .dockerignore file to achieve more efficiency in the docker build process.
UPDATE: I did try to run the scenario with the node_modules removed from .dockerignore file, and the image is showing 940MB, whereas creating the image with node_modules inside the .dockerignore file - though the process may be more efficient - the output image is 942MB (2MB larger).
Consider docker as a entire new box, where everything will be installed and given commands to run specific tasks
In this case, try two things
Create .dockerignore file and ignore all files which you think you don't want to include or let docker handles from itself.
.git
*/node_modules
####### other files...
And in Dockerfile just copy package.json as docker it use for deployment, so it makes sense that only package.json file will get change. So try adding COPY package*.json ./ in Dockerfile.
» npm install dockerignore
» npm install @balena/dockerignore
» npm install node-dockerignore