Containerizing a Node.js Application using Docker

Saurabh Pandey
2 min readJan 6, 2025

--

In modern development workflows, Docker has become a vital tool for packaging applications into containers. A container is a lightweight, portable, and self-sufficient unit that ensures your application works seamlessly across different environments. In this article, we’ll walk through how to containerize a simple Node.js application using Docker and manage it with Docker Compose, making it easier to deploy and scale applications.

3. Understanding the Project Structure

Provide a basic explanation of the folder structure for your Node.js application, especially how it will look once containerized. This will help readers understand where everything goes.

Example Project Structure:

/my-node-app
├── app.js
├── package.json
├── <other app related files and folders>
├── Dockerfile
├── docker-compose.yml
  • app.js: The main Node.js application file.
  • package.json: Contains the dependencies and scripts to run the application.
  • Dockerfile: A text file that contains instructions to build a Docker image.
  • docker-compose.yml: Defines services and how to manage multi-container setups.

Check out the below configuration for containerizing the NodeJS project. through the below configuration, we can containerize node js application

file Dockerfile

# Use the official Node.js image
FROM node:16

# Set the working directory inside the container
WORKDIR /app

# Copy package.json and package-lock.json for dependency installation
COPY package*.json ./

# Install Node.js dependencies
RUN npm install

# Copy the application code into the container
COPY . .

# Expose the port the app will run on
EXPOSE 3000

# Start the Node.js application
CMD ["npm", "start"]

you can run the file directly using

docker run -p 3000:3000 sampleapp

To make it production-ready we can add a compose file to it docker-compose.yml

version: '3.8'

services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- NODE_ENV=production
volumes:
- .:/usr/src/app
restart: always

through this, we can manage different environments and also can add other services like Postgres or MySQL or maybe any alert services

To get access to more articles, Join our discord community for better learning experience https://discord.gg/D2EU5N6z

--

--

No responses yet