DEV Community

Cover image for Creating and Managing Docker Containers for a Simple Node.js Application
bankolejohn
bankolejohn

Posted on

Creating and Managing Docker Containers for a Simple Node.js Application

Docker is a powerful tool that enables developers to package applications and their dependencies into a portable container, making it easy to deploy and run anywhere. In this article, we'll walk through building a Docker image for a simple Node.js application, and cover key commands for managing Docker containers. This includes writing a Dockerfile, building the image, and running the container.

Prerequisites

  • Basic knowledge of Docker.
  • Docker installed on your machine.
  • Node.js and npm installed for testing the app locally.

Step 1: Create a Simple Node.js Application

First, let’s set up a basic Node.js application. Create a new directory for your project and initialize it:

mkdir node-docker-app
cd node-docker-app
npm init -y
Enter fullscreen mode Exit fullscreen mode

Next, create an index.js file with the following content:

// index.js
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Hello, Docker!');
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
Enter fullscreen mode Exit fullscreen mode

Install express as a dependency:

npm install express
Enter fullscreen mode Exit fullscreen mode

Now you have a basic Node.js app that responds with "Hello, Docker!" at the root URL.

Step 2: Write the Dockerfile

A Dockerfile is a script that contains instructions for building a Docker image. Create a file named Dockerfile in your project directory and add the following content:

# Use the official Node.js image as the base image
FROM node:18

# Set the working directory inside the container
WORKDIR /app

# Copy package.json and package-lock.json to the working directory
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application files
COPY . .

# Expose the port the app runs on
EXPOSE 3000

# Define the command to run the app
CMD ["node", "index.js"]
Enter fullscreen mode Exit fullscreen mode

Explanation of Dockerfile Commands

  • FROM: Specifies the base image. We use the official Node.js image.
  • WORKDIR: Sets the working directory inside the container to /app.
  • COPY: Copies files from your local machine to the working directory inside the container.
  • RUN: Executes commands in the Docker image (e.g., npm install to install dependencies).
  • EXPOSE: Exposes port 3000 to allow the application to be accessible.
  • CMD: Defines the command to run when the container starts.

Step 3: Build the Docker Image

With the Dockerfile in place, build the Docker image using the following command:

docker build -t node-docker-app .
Enter fullscreen mode Exit fullscreen mode
  • -t node-docker-app: Tags the image with a name for easy reference.
  • .: Refers to the current directory, which contains the Dockerfile.

Once the build is complete, you can list the Docker images on your system:

docker images
Enter fullscreen mode Exit fullscreen mode

This should show the node-docker-app image you just built.

Step 4: Run the Docker Container

Now that we have an image, let's run a container from it:

docker run -p 3000:3000 node-docker-app
Enter fullscreen mode Exit fullscreen mode
  • -p 3000:3000: Maps port 3000 on your local machine to port 3000 in the container.
  • node-docker-app: The name of the image to run.

Once the container is running, you can open your browser and navigate to http://localhost:3000 to see your app in action. It should display "Hello, Docker!".

Step 5: Managing Docker Containers

List Running Containers

To see the currently running containers, use:

docker ps
Enter fullscreen mode Exit fullscreen mode

This will show you the container ID, image name, and other details about running containers.

Stop a Container

To stop a running container, use:

docker stop <container_id>
Enter fullscreen mode Exit fullscreen mode

Replace <container_id> with the ID of your container, which you can get from docker ps.

Remove a Container

To remove a stopped container, use:

docker rm <container_id>
Enter fullscreen mode Exit fullscreen mode

Remove an Image

If you want to remove the Docker image, use:

docker rmi node-docker-app
Enter fullscreen mode Exit fullscreen mode

Make sure that no containers are using the image before you try to remove it.

Step 6: Pushing the Docker Image to Docker Hub (Optional)

If you want to share your Docker image, you can push it to Docker Hub:

  1. Log in to Docker Hub:

    docker login
    
  2. Tag the image with your Docker Hub username:

    docker tag node-docker-app yourusername/node-docker-app
    
  3. Push the image to Docker Hub:

    docker push yourusername/node-docker-app
    

Now, anyone can pull and run your image using:

docker pull yourusername/node-docker-app
docker run -p 3000:3000 yourusername/node-docker-app
Enter fullscreen mode Exit fullscreen mode

Conclusion

In this article, we created a simple Node.js application and packaged it into a Docker container using a Dockerfile. We went through building, running, and managing the Docker image, and even pushing it to Docker Hub for easy distribution. Docker simplifies the process of deploying applications by providing a consistent runtime environment, making it a valuable tool for developers.

Top comments (0)