Day 2/40 CKA Dockerize an Application
Tags: 40daysofkubernetes, cloudopscommunity, piyushsachdeva
Published: 2024-06-23 12:36:01

**Dockerizing Your Project: A Step-by-Step Guide**
Docker is an essential tool for modern software development, providing a consistent and isolated environment for your applications. In this guide, we will walk you through the process of dockerizing a sample Node.js application. By the end, you will have a Docker image that you can run anywhere, ensuring your application behaves the same in all environments.

**Prerequisites**
Docker Desktop: Download and install the Docker Desktop client from Docker's official website.
Simplify Setup: By providing a starting point, docker init helps developers get up and running with Docker more quickly, reducing the initial setup time and effort.

Sample Application: We will use a sample application for this demo. You can clone it from GitHub or use your project.
Step 1: Clone the Sample Repository
First, clone the sample repository:

```
git clone https://github.com/docker/getting-started-app.git
cd getting-started-app/
```

Step 2: Create a Dockerfile
A Dockerfile is a text file that contains instructions on how to build a Docker image. Create an empty Dockerfile in your project directory:

```
touch Dockerfile
```

Using your preferred text editor, open the Dockerfile and add the following content:

**Dockerfile**

```
# Use the official Node.js 18 image from the Docker Hub
FROM node:18-alpine

# Set the working directory inside the container
WORKDIR /app

# Copy all files from the current directory to the working directory in the container
COPY . .

# Install dependencies using yarn
RUN yarn install --production

# Specify the command to run the application
CMD ["node", "src/index.js"]

# Expose port 3000 to the host
EXPOSE 3000
```
Step 3: Build the Docker Image
With the Dockerfile in place, you can build the Docker image. Run the following command in your terminal:

```

docker build -t day02-todo .
```

This command tells Docker to build an image named day02-todo using the instructions in the Dockerfile.

Step 4: Verify the Image
After the build process completes, verify that the image has been created and stored locally:

```

docker images

```

You should see day02-todo listed among the available images.

Step 5: Push the Image to Docker Hub
To share your Docker image with others or deploy it to another environment, push it to Docker Hub. First, log in to Docker Hub:

```
docker login
```
Tag the image with your Docker Hub username and repository name:

```
docker tag day02-todo:latest username/new-reponame:tagname
```

Push the image to Docker Hub:

```
docker push username/new-reponame:tagname
```

Step 6: Pull the Image to Another Environment
To use the image in another environment, you can pull it from Docker Hub:
```
docker pull username/new-reponame:tagname

```
Step 7: Run the Docker Container
Start a container from your Docker image:
```
docker run -dp 3000:3000 username/new-reponame:tagname

```
This command maps port 3000 of your host machine to port 3000 of the container, allowing you to access the application locally.

Step 8: Verify the Application
If everything was set up correctly, your application should be running and accessible at http://localhost:3000.

Step 9: Access the Container
If you need to enter the container for debugging or other purposes, use the following command:
```

docker exec -it containername sh
```

Replace containername with the actual name or ID of your running container.

Conclusion
Congratulations! You have successfully dockerized a Node.js application. This Docker image can now be run anywhere, ensuring a consistent environment across development, testing, and production. For further exploration, consider using sandbox environments like [Play with Docker](https://labs.play-with-docker.com/) or [Play with Kubernetes](https://labs.play-with-k8s.com/).

Kindly refer: 
youtube playlist [CKA Full Course 2024](https://youtu.be/nfRsPiRGx74) by Piyush Sachdeva for more hands-on.
Github Link: https://github.com/Emmy-code-dev/CKA-2024

**Happy Dockerizing!**