The 2021 JavaScript Full-Stack Bootcamp is NOW OPEN FOR SIGNUPS!
In the Dockerfile introduction post I introduced a simple Node.js Dockerfile example: FROM node:14 WORKDIR /usr/src/app COPY package.json app.js./ RUN npm install EXPOSE 3000 CMD 'node', 'app.js' NOTE: use double quotes in the CMD line. Recently I ran into this problem, and I just discovered there is a compatible version in debian-backports. In my case I can use command apt install node-npm-package-arg=6.1.1-1bpo10+1 and then apt install npm=6.14.3+ds-1bpo10+1, after that the npm will be upgraded to a warning-free version for Node.js v10.
In the Dockerfile introduction post I introduced a simple Node.js Dockerfile example:
NOTE: use double quotes in the CMD
line. Single quotes will result in an error.
Let’s use this Dockerfile to build an image, and then run the container.
I’m going to create this file in the dev/docker/examplenode
folder. I create a simple Node.js app in the app.js
file, using Express:
Super simple, but we have one dependency. I need to add it to the package.json
file, so I run
Now you can run node app.js
and make sure it works:
Stop this process and let’s create a Docker Image from this.
All you need are the app.js
, package.json
and package-lock.json
files.
And the Dockerfile. Create a Dockerfile
file in the same folder, with no extension (not Dockerfile.txt).
You can freely delete the node_modules
folder that now contains the Express library and its dependencies, but you can also create a .dockerignore
file and add node_modules
inside it, to make Docker ignore this folder completely.
It works like .gitignore
in Git.
Run the command
It will take a while to download the Node image and run npm install
, then you’ll get a successful message.
It’s important to note that after you first download a base image like the node
one we use here, that will be cached locally, so you don’t need to download it again and the image building process will be much faster.
Now we can run a container from the image:
Now you can see the image running in Docker Desktop:
And you can click the “Open in browser” button to open the app running on port 3000:
Just like before! Except now the app is running in its own container, completely isolated, and we can run whatever version of Node we want in the container, with all the benefits Docker gives us.
For example you can remove the container and run it on port 80 instead of 3000, with:
The image does not need to change, all you change is the port mapping. Here’s the result:
The 2021 JavaScript Full-Stack Bootcamp IS NOW OPEN FOR SIGNUPS UNTIL NEXT TUESDAY! Don't miss this opportunity, signup TODAY!