Learn how to run a Node.js Docker container with our step-by-step guide. Discover how to create a Dockerfile, build an image, and deploy your Node.js application efficiently. Perfect for developers aiming to streamline their development and deployment process. #centlinux #linux #docker
Table of Contents
What is Node.js?
Node.js is an open-source, cross-platform JavaScript runtime environment that allows developers to execute JavaScript code outside of a web browser. Built on Chrome’s V8 JavaScript engine, Node.js is designed for building scalable network applications, particularly web servers and real-time applications like chat programs.
Key Features
- Asynchronous and Event-Driven: Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. This is particularly useful for handling multiple simultaneous connections, making it ideal for real-time applications.
- Single-Threaded: Despite being single-threaded, Node.js can handle many concurrent connections with high throughput, thanks to its non-blocking architecture.
- NPM (Node Package Manager): Node.js comes with NPM, a powerful package manager that provides access to thousands of reusable modules, libraries, and tools that can be easily integrated into applications.
- Cross-Platform: Node.js runs on various platforms, including Windows, Linux, Unix, and macOS, making it highly versatile for different development environments.
- Rich Ecosystem: The vast ecosystem of Node.js includes frameworks like Express.js, Koa.js, and Nest.js, which simplify the development of web applications and APIs.
Common Use Cases
- Web Servers: Node.js is commonly used to build web servers that can handle numerous client requests efficiently.
- APIs: Creating RESTful APIs and microservices that can interact with databases and other services.
- Real-Time Applications: Applications requiring real-time interactions, such as chat applications, online gaming, and collaborative tools.
- Command-Line Tools: Developing command-line tools and scripts for various automation tasks.
Advantages of Using Node.js
- Performance: High performance due to the non-blocking I/O operations and the fast V8 engine.
- Scalability: Suitable for scalable applications that need to handle many concurrent connections.
- Developer Productivity: JavaScript is used both on the client and server sides, promoting code reuse and simplifying the development process.
- Active Community: Strong community support and continuous updates and improvements.
Node.js is a popular choice for modern web development, offering efficiency and scalability for a wide range of applications.
Recommended Online Training: Docker and Containers Essentials
Docker Host Specification
We are using a preconfigured Docker Host with following specification.
- CPU – 3.4 Ghz (2 cores)
- Memory – 4 GB
- Storage – 20 GB
- Operating System – Ubuntu Server 18.04 LTS
- Hostname – docker-01.centlinux.com
- IP Address – 192.168.116.206 /24
If you want to see how to configure a Docker Host, the you can follow our following articles.
Create a Directory for Node.js Docker Project
Connect with Docker Host (docker-01.centlinux.com) as an admin user by using a ssh tool.
Create a directory for your Node.js Docker Project.
ahmer@docker-01:~$ mkdir ~/nodejs_docker ahmer@docker-01:~$ cd nodejs_docker
Develop Node Web App
To keep things simple, we are writing a “HelloWorld” node web application for our Node.js Docker container.
ahmer@docker-01:~/nodejs_docker$ nano myapp.js
And add following lines of code to create a simple “Hello World” application.
'use strict'; const express = require('express'); // Constants const PORT = 3000; const HOST = '0.0.0.0'; // App const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(PORT, HOST); console.log(`Running at http://${HOST}:${PORT}`);
Create the Node.js package.json file. This file provides the meta data information for our Node.js Docker application.
{
"name": "myapp",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "Alaric Bird <alaric.bird@gmail.com>",
"main": "myapp.js",
"scripts": {
"start": "node myapp.js"
},
"dependencies": {
"express": "^4.16.1"
}
}
Create a Docker file for Node.js Docker Project:
To define the deployment procedure such as docker image to be used, dependencies, service port, etc. We are required to create a Dockerfile for our Nodejs Docker container.
ahmer@docker-01:~/nodejs_docker$ nano Dockerfile
Add following directives therein (each directive is briefly described in the comments before it).
# Docker Image to be used FROM node:13-alpine # Create a working directory within NodeJS Docker container WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied where available (npm@5+) COPY package*.json ./ RUN npm install # Bundle the App source COPY . . # Expose the port 3000 to network computers EXPOSE 3000 #Run the node command and start our web application CMD [ "node", "myapp.js" ]
We are using the node:13-alpine image here, because it is the lightest image that will fulfill our project’s requirement.
However, there are many variants of the node images are available at the Docker Hub. To get the complete list, you can visit the Official Docker Images for Nodejs Page.
Build the Node.js Docker Image
We have created the Dockerfile and the Node.js web application.
Now build the Docker image for our Node.js web application by using the Dockerfile.
ahmer@docker-01:~/nodejs_docker$ sudo docker build . Sending build context to Docker daemon 4.096kB Step 1/7 : FROM node:13-alpine ---> 483343d6c5f5 Step 2/7 : WORKDIR /usr/src/app ---> Using cache ---> bad78ca928c6 Step 3/7 : COPY package*.json ./ ---> Using cache ---> fdd7ac2c1274 Step 4/7 : RUN npm install ---> Using cache ---> 8a34ec80bd87 Step 5/7 : COPY . . ---> 873f9ddd4360 Step 6/7 : EXPOSE 3000 ---> Running in 7d567e0f4da3 Removing intermediate container 7d567e0f4da3 ---> b3e087682594 Step 7/7 : CMD [ "node", "myapp.js" ] ---> Running in 4e170d3a1567 Removing intermediate container 4e170d3a1567 ---> 7be386175292 Successfully built 7be386175292
We have successfully built our Node.js Docker image.
We have built this image locally, however you can build and store this image on Docker Hub by using your Docker Hub credentials.
Run Node.js Docker Container
Start a container by using above Docker image.
ahmer@docker-01:~/nodejs_docker$ sudo docker run > --name nodejs-docker-app > -p 80:3000 > -d > 7be386175292 87f61f85cd0546786a2af8a5eb6da1402e753a1239a0f1088a735217130a603b
We have started our Node.js Docker container. Check its log now.
ahmer@docker-01:~/nodejs_docker$ sudo docker logs nodejs-docker-app Running at http://0.0.0.0:3000
Test the Dockerized Node.js Application
Access the Dockerized Nodejs application using the curl command.
ahmer@docker-01:~/nodejs_docker$ curl localhost:80 Hello World!
Our Node.js application has been deployed in a Docker container.
If you are new to Docker platform, then you should read Docker in Action (PAID LINK) by Manning Publications.
Final Thoughts
Running a Node.js application within a Docker container can significantly enhance your development and deployment process. By containerizing your application, you ensure consistency across different environments, ease scalability, and simplify dependency management. Docker provides a robust platform for deploying Node.js applications seamlessly, whether for development, testing, or production.
If you need expert assistance in running your Node.js Docker container or any other Docker-related services, I’m here to help. With my extensive experience in Docker and Node.js, I can provide tailored solutions to meet your specific needs.
Check out my Fiverr profile for more information on my services and to get started. Let’s streamline your development process and deploy your applications efficiently with Docker!
Feel free to reach out, and let’s take your project to the next level!