DEV Community

Louretta
Louretta

Posted on

Run A NodeJs Application In a Docker Container

we will cover the following:
1.Installation of docker on ubuntu(AWS)
2.Containerisation of Nodejs application
3.update the application
4.share the application

Perequisites

  • AWS Account with EC2 access

  • Basic knowledge of Docker concepts and commands
    Steps to Setup Docker Project on Ubuntu (AWS EC2 Instance)

  • Create an Ubuntu EC2 Instance
    Sign in to AWS Management Console
    Go to the AWS Management Console and log in with your credentials.

  • Launch an EC2 Instance
    Navigate to EC2 Dashboard:
    Click on Services and select EC2 under Compute.
    Click Launch Instance.
    Choose an Ubuntu Server AMI (e.g., Ubuntu Server 20.04 LTS).
    Select an Instance Type (e.g., t2.micro).
    Configure Instance Details and add storage as needed.(see image below)
    Image description

  • Configure Security Group:
    Add rules to open ports 22 (SSH), 80 (HTTP), and 3000 (Application port).
    Review and Launch the instance, then SSH into the terminal.
    Image description
    2.Install Docker and Docker Compose
    Run this command to install the necessary tools and packages to handle secure software installations and manage additional software repositories effectively.
    Image description
    Add the Docker GPG key to your system's list of trusted keys using command below
    Image description
    Add the Docker repository on your Ubuntu system which contains Docker packages including its dependencies, for that execute the below command:
    Image description
    Update the package index on your Ubuntu system and install Docker Community Edition suing commands below(Ps: To Check the Latest Version: Visit the Docker Compose Releases page and find the latest version)
    Image description
    Run the following command to download the latest version of docker compose (ensure you have the latest: To Check the Latest Version: Visit https://github.com/docker/compose/releases)
    Image description
    Set the correct permissions so that doxker-compose is executable
    Image description
    Run this command to verify sucessfule installation
    Image description
    3.Containerization of Node.js Application
    Start docker engine and check status
    Image description
    Clone docker compose application:Cloning a Docker Compose application this is important because it ensures consistency, ease of setup, and portability across different environments.Run the command below to clone the application
    Image description
    Run ls to see cloned files
    Image description
    To see content in directory run comand below
    Image description
    Build the app container image:To build the container image, you need to create a Dockerfile. A Dockerfile is a plain text file that contains a set of instructions which Docker uses to create a container image.
    In the app directory of the cloned repository, where the package.json file is located, create a file named Dockerfile
    Open the Dockerfile and paste the code provided below into it.
    Save and close the Dockerfile.
    Run the following command to create a Dockerfile
    Image description
    Then, paste the following code into the Dockerfile
    Image description
    Change directory to the app directory
    Image description
    Build the container image using the following command
    Image description
    Start application container by running the command below.This command ensures that the Docker container runs correctly, and the application is accessible on port 3000 of your host machine
    Image description
    After a few seconds, open your web browser and paste the following url http://18.169.10.56:3000/ replacing your-docker-server-ip with your Docker server's public IP to view the application
    you can add one or two items as seen in the image below to ensure the application is working as expected
    Image description

  1. Update The Application To modify the app.js file follow these steps Run the command to open the file in vi:sudo vi ~/getting-started/app/src//static/js/app.js-expected output, see image below -search for text "NO items yet! Add one above!" press '/' to initiate a search and then type 'No' and press 'Enter' on your keyboard, the curson will move the first occureence of the text starting with "No"

Image description
Press 'a' to enter insert mode, allowing you to edit the text starting from the next character
Change 'No items yet! Add one above! to you have no todo items yet! Add one above!
Press esc to exit insert mode, type :wq! and press enter to save chnages and close file

Image description
Use the same docker build command you used before to create an updated version of the image.

Image description
After building start a new container

Image description
The previous step failed because an existing container is already using the host’s port 3000. To resolve this issue, we need to stop and remove the old container before running the updated image:To do this run command below
Run sudo docker ps command to see the container ID of the running container
Find the container ID from the output of the previous command and stop the container by running

Image description
Remove the stopped container to free up the port

Image description
Now that the old container is stopped and removed, run the updated image

Image description
After running the updated Docker container, you might notice that the data added previously has disappeared. This is because the data stored in the container does not persist when the container is removed.
Image description

5. Share the Application
Go to Docker Hub and sign in with your Docker ID or create a new Docker ID if you don't have one
After signing in, click on your profile icon at the top right corner of the page and select Account Settings from the dropdown menu.
In the Account Settings page, click on Repositories in the left sidebar.
Click on the green Create Repository button.

Image description
Your repository is now created and ready to use. You will see the repository details and instructions for pushing your Docker images to this repository.
Image description
Run the command below to login to Docker Hub, make you use you replace the username with your username . When prompted for password, type your Docker Hub password

Image description
Push image to dockerhub using the command below and expected output

Image description
After pushing the image to docker hub pull image and run it as a container:Pulling Docker images and running them as containers ensures that your applications are portable, scalable, and secure. It simplifies deployment processes and enhances consistency across different environments, making Docker a powerful tool for modern software development and deployment practices

Image description

SUMMARY
This project involves setting up a Docker environment on an Ubuntu EC2 instance in AWS, containerizing a Node.js application, updating it, and sharing it on Docker Hub. The Node.js application runs in a Docker container, accessible via port 3000, and can be accessed and modified through commands and scripts.
Regarding data persistence, while the Docker container provides a portable and scalable environment for applications, data persistence strategies such as volume mounts or database containerization are recommended for ensuring that data remains intact across container restarts or updates. This aspect will be covered in subsequent posts or steps, focusing on maintaining data integrity and application reliability in Dockerized environments

Top comments (0)