DEV Community

Cover image for Containerizing Next.js App with Docker: Quick Guide
Pulkit Gupta
Pulkit Gupta

Posted on • Edited on

Containerizing Next.js App with Docker: Quick Guide

Next.js is a powerful React framework that makes it easy to create server-rendered React applications with exceptional performance and user experience. However, deploying Next.js applications can be a bit challenging, especially when it comes to managing dependencies, configuring the environment, and ensuring consistent behavior across different platforms.

This is where Docker comes in. Docker is an open-source platform that simplifies the process of building, deploying, and running applications in containers. By containerizing your Next.js app, you can streamline your deployment process, improve portability, and ensure that your app runs consistently across different environments.

β€£ To learn more about docker, read Getting Started With Docker

In this blog post, we'll walk you through the process of containerizing your Next.js app using Docker. We'll start by discussing the benefits of using Docker with Next.js and then dive into the steps you need to take to get your app up and running in a Docker container.

Why Use Docker with Next.js?

There are several reasons why you might want to consider containerizing your Next.js application with Docker:

  1. Consistent behavior across environments: Docker containers provide an isolated environment where your app runs, ensuring that it behaves consistently across different platforms and environments.
  2. Simplified dependency management: By bundling all the dependencies your app needs within a Docker container, you eliminate the need to install and manage them manually on the host machine.
  3. Easy deployment and scaling: With Docker, you can easily deploy and scale your Next.js app to multiple instances, making it easier to handle traffic spikes and high availability requirements.
  4. Portable and shareable: Docker containers can be easily shared with others, making it easy for team members to collaborate on a project or deploy your app to different environments without the need for manual configuration.

Containerizing Your Next.js App: A Step-by-Step Guide

To get started with containerizing your Next.js app, follow these steps:

Step 1: Install Docker

Before you can containerize your Next.js app, you need to have Docker installed on your machine. You can download the appropriate version of Docker for your operating system from the Docker website (https://www.docker.com/products/docker-desktop).

Step 2: Create a Dockerfile

A Dockerfile is a script that contains instructions for building a Docker image. It specifies the base image, dependencies, and configuration needed to run your Next.js app in a container.

In your Next.js project's root folder, create a new file named Dockerfile with the following content:



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

# Set the working directory inside the container  
WORKDIR /app  

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

# Install dependencies  
RUN npm install  

# Copy the app source code to the container  
COPY . .  

# Build the Next.js app  
RUN npm run build  

# Expose the port the app will run on  
EXPOSE 3000  

# Start the app  
CMD ["npm", "start"]  


Enter fullscreen mode Exit fullscreen mode

This Dockerfile specifies that we'll be using the official Node.js image as our base and sets up a working directory inside the container. We then copy our package.json and package-lock.json files to the container and install the dependencies. Next, we copy the source code to the container and build the Next.js app. Finally, we expose port 3000 and start the app using npm start.

Step 3: Build the Docker Image

With the Dockerfile in place, you can now build the Docker image for your Next.js app. Run the following command in your project's root folder:



docker build -t your-image-name .  


Enter fullscreen mode Exit fullscreen mode

Replace your-image-name with a name of your choice for the Docker image. This command will create a Docker image with your Next.js app and its dependencies.

docker-build

β€£ To learn more about docker images, read Docker Image: A Quick Guide

Step 4: Run the Docker

Run Docker Image using the command given below:



docker run --rm -p 3000:3000 --name <container-name> <image-name>


Enter fullscreen mode Exit fullscreen mode

docker-run

πŸŽ‰ We have containerize out Next.js application

Step 5: Stop Docker Container

To Stop running docker conatiner run the command below:



docker stop <container-name>


Enter fullscreen mode Exit fullscreen mode

docker-stop

πŸŽ‰ By this, we have successfully containerize our Next.js project using Docker πŸš€.

roll-in

Follow for more.

Top comments (3)

Collapse
 
code42cate profile image
Jonas Scholz

Nice post, but you should update Node 14 to a maintained Node Version such as 18 or 20. Also maybe take a look at the recommendation by Vercel on how to dockerize Next.js Apps: github.com/vercel/next.js/tree/can.... Their Dockerfile is a bit more optimizied :)

Collapse
 
pulkit30 profile image
Pulkit Gupta

Yeh mann, strongly agree with your recommendations.

Collapse
 
menaiala profile image
Menai Ala Eddine

Thank you for this article, what about tests? I mean how can we run our unit tests ( Jest
) and components tests ( Cypress ).