Table of contents
Welcome to my blog! In this post, we're going to dive into the exciting world of Docker and containerization by creating a simple Node.js web application. Whether you're a beginner or someone looking to strengthen their understanding of Docker, this step-by-step guide will walk you through the entire process.
1. Introduction to Docker and Dockerfile
Docker is a powerful platform for developing, shipping, and running applications in containers. Containers allow you to package your application and its dependencies together, ensuring consistency across different environments.
A Dockerfile is a script that contains a set of instructions for building a Docker image. It specifies the base image, copies files, installs dependencies, and defines the commands to run when the container starts.
2. Setting Up Your Node.js Web Application
Before we begin with Docker, let's create a simple Node.js web application. Open your terminal and follow these steps:
# Create a new directory for your project
mkdir my-first-docker-project
cd my-first-docker-project
# Initialize a new Node.js project
npm init -y
# Install Express.js, a minimal and flexible Node.js web application framework
npm install express
Now, create a file named app.js
in the project directory with the following content:
Oh! Here's the Respective Code:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello, Docker World!');
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
This basic Express.js application responds with "Hello, Docker World!" when accessed.
Setting Up "start" Script inpackage.json
Open your package.json
file, which was generated when you ran npm init
, and add a "start" script. This script defines the command to start your application. Update the "scripts"
section in your package.json
file as follows:
The critical part is the "start"
script, which should specify the command to start your application (node app.js
in this case).
3. Creating a Dockerfile
Now, let's create a Dockerfile to containerize our Node.js application. In your project directory, create a file named Dockerfile
with the following content:
Here's the Code:
# Use an official Node.js runtime as a base image
FROM node:14
# Set the working directory in 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 application files to the working directory
COPY . .
# Expose a port for the application to run on
EXPOSE 3000
# Define the command to run the application
CMD ["node", "app.js"]
This Dockerfile defines the steps to set up the Node.js environment, install dependencies, and run the application.
4. Building and Running the Docker Container
Now, it's time to build and run your Docker container. Open your terminal and execute the following commands:
# Build the Docker image
sudo docker build -t my-first-docker-project .
# Run the Docker container, mapping port 8080 on your host to port 3000 in the container
sudo docker run -p 8080:3000 -d my-first-docker-project
5. Verifying Your Dockerized Application
Open your web browser and navigate to http://localhost:8080
. You should see "Hello, Docker World!" displayed, confirming that your Dockerized Node.js application is running successfully.
6. Pushing the Docker Image to Docker Hub
To share your Docker image with others, you can push it to a registry like Docker Hub. Ensure you have a Docker Hub account and run the following commands:
# Log in to Docker Hub
docker login
# Tag your image with your Docker Hub username and image name
docker tag my-first-docker-project your-dockerhub-username/my-first-docker-project
# Push the image to Docker Hub
docker push your-dockerhub-username/my-first-docker-project
Replace your-dockerhub-username
with your Docker Hub username.
7. Conclusion
Congratulations! You've successfully Dockerized a Node.js web application and learned the basics of creating a Dockerfile.
I hope this guide helps you on your #90DaysOfDevOps journey. If you have any questions or feedback, feel free to leave a comment below. Happy coding!