How to Serve a Node App in Docker
source link: https://typeofnan.dev/how-to-serve-a-node-app-in-docker/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Serving a node application in Docker is actually fairly simply. In this post, we’ll do so using only a six-line Dockerfile!
Create a Sample App
For our proof-of-concept, we’ll create a sample node app in a new directory. Let’s quickly put one together.
Create app directory
First create a node-in-docker
directory and cd
into it.
mkdir node-in-docker
cd node-in-docker
initialize npm project with defaults
Next, initialize an npm project. The -y
flag will initilize with default settings.
npm init -y
Add express.js and simple code
Our app will be an express app.
npm i express
Create an index.js
file with some simple home route handling.
touch index.js
With the following code:
const express = require('express');
const app = express();
const port = process.env.NODE_SERVER_PORT;
app.get('/', (req, res) => res.send('Sample node app!'));
app.listen(port, () =>
console.log(`Example app listening at http://localhost:${port}`)
);
Note that our port
will come from a NODE_SERVER_PORT
environment variable.
Test the app
Let’s test that our app looks good before we add any Docker code. We can do this by using node .
and remembering to include our environment variable.
NODE_SERVER_PORT=3000 node .
Now if we navigate to http://localhost:3000, we should see our sample app.
If you see this, we’re now ready to dive into docker land!
Add Docker
In this minimal example, all we’ll need is two files:
- Dockerfile
- .dockerignore
The Dockerfile will be the blueprint for creating our Docker image and the .dockerignore will be used to tell Docker to ignore the node_modules
folder when building the image.
.dockerignore
The .dockerignore
file is pretty easy, let’s just throw the string node_modules
in there.
echo "node_modules" > .dockerignore
Dockerfile
The Dockerfile is a bit more complex, but not by much!
Let’s first create the file
touch Dockerfile
And now here’s the magic. Read the comments to see what’s going on.
# Use the node v10 image
FROM node:10
# Set working directory
WORKDIR /app
# Copy contents of current directory into working dir
COPY . .
# install node modules
RUN npm i
# Set the node server port to 3000
ENV NODE_SERVER_PORT=3000
# Containers start the app by running node .
ENTRYPOINT ["node", "."]
Build the Docker image
Let’s build the docker image based on the instructions in our Dockerfile!
We will use the tag (-t
) node-server
and our build context will be the current directory (.
).
docker build -t node-server .
Run a container
Now we can create and run a container based on our node-server
image! To so so, we’ll use the following options:
--rm
to cleanup old instances-it
flags for terminal behavior- Expose container port 3000 on port 3000
docker run --rm -it -p 3000:3000 node-server
Now if everything works, we should be able to go to http://localhost:3000 and see our sample node app!
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK