Docker Guide: Dockerizing Nodejs Express Application on Ubuntu 18.04

Docker is an open-source project that provides an open platform for developers and sysadmins to build, package, and run applications anywhere as a lightweight container. Docker automates the deployment of applications inside software containers.

Nodejs is an open source JavaScript run-time environment. It's multi-platform run-time, can be installed on Linux, Windows, MacOS, FreeBSD, etc. Nodejs is very useful for building both server and desktop applications.

In this tutorial, I will show you how to create a docker image for an existing Nodejs Express application project in Ubuntu 18.04. We will learn about dockerizing a Nodejs application, and then deploy the application as a container to the docker environment using a docker-compose script.

Prerequisites

  • Ubuntu 18.04
  • Root privileges

What we will do

  1. Install Docker CE
  2. Install Docker-Compose
  3. Setup Nodejs Express Project
  4. Build the Project
  5. Testing

Step 1 - Install Docker CE

In this tutorial, we will install docker-ce community edition from the docker repository. We will install docker-ce community edition and docker-compose that supports compose file version 3.

Before installing docker-ce, install docker dependencies needed using the apt command.

sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

Now add the docker key and repository by running commands below.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Install Docker

Install the docker-ce package.

sudo apt install docker-ce

After the installation is complete, start the docker service and enable it to launch every time at system boot.

systemctl start docker
systemctl enable docker

Start Docker

Next, we will give the normal user privileges to run and manage docker container.

Add a new user named 'mohammad' and add it to the docker group.

useradd -m -s /bin/bash mohammad
usermod -a -G docker mohammad

Now login as the 'mohammad' user and run docker container hello-world.

su - mohammad
docker run hello-world

And you will get the result as shown below.

Add user and test the user

Step 2 - Install Docker-Compose

In this step, we will install docker-compose manually from the binary file that can be downloaded from GitHub. We will install the latest docker-compose version that will support the compose v3.

Download the latest 1.22.0 version of docker-compose using curl command to the '/usr/local/bin' directory, and then make it executable using chmod.

Run commands below.

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

And the latest docker-compose version has been installed, check by running the docker-compose command below.

docker-compose version

Following is the result.

Install Docker Compose

Step 3 - Setup Nodejs Express Project

In this section, we will configure the Nodejs application environment. We will be using simple nodejs application that can be generated using the 'express-generator'.

Login to the 'mohammad' user.

su - mohammad

Create a new directory named 'project' and go to it.

mkdir -p project
cd project

Now generate a simple hello-word nodejs application using the 'express' command below.

express hakase-app

Note:

Make sure nodejs, npm, and the 'express-generator' packages have been installed on the system.

And you will get the simple nodejs express app on the 'hakase-app' directory.

Install Nodejs Express Project

Next, we will build our custom docker image for the 'hakase-app' nodejs application.

Under the 'project' directory, create a new 'Dockerfile' using vim.

vim Dockerfile

Paste the following docker image configuration there.

FROM node:8.11.4-alpine

RUN mkdir -p /src
RUN npm install express-generator -g

WORKDIR /src
ADD hakase-app/package.json /src/package.json
RUN npm install

EXPOSE 3000
CMD node hakase-app/bin/www

Save and exit.

Use npm to install application

We're creating a new custom docker image for our nodejs application with specifications below.

  • The custom image is based on the official nodejs image 8.11.4 alpine version.
  • We're creating a new directory for our project '/src'.
  • Install the 'express-generator' to the custom image.
  • Add the 'package.json' file that contains application profile and packages needed to the '/src' directory.
  • Install all nodejs packages needed for the project, based on the 'package.json' file.
  • Export the port 3000 with default exec start command 'node hakase-app/bin/www'.

Next, we will build out the custom image based on the docker-compose script.

Create a new yml file 'docker-compose.yml' using vim.

vim docker-compose.yml

Paste the following configuration there.

version: '3'

services:

  hakase-app:
    build: .
    volumes:
      - ./hakase-app:/src/hakase-app
    ports:
      - "3000:3000"
    restart: always

Save and exit.

Create docker compose yml file

We're creating a new docker service named 'hakase-app', and in the same time we're building the custom docker image based on the 'Dockerfile' on the project directory and will mount automatically the hakase-app application files.

The Nodejs Express Setup has been completed.

Step 4 - Build and Run the Project

Login as the 'mohammad' user and go to the 'project' directory

su - mohammad
cd project/

Build the image and create the docker service hakase-app using the docker-compose command below.

docker-compose build

Now you will get the result as shown below.

Build docker project

And when its complete, run the 'hakase-app' docker service.

docker-compose up -d

Following is the result.

Use docker-compose up

The custom docker image for our Nodejs application has been created, and the hakase-app docker service is up and running.

Step 5 - Testing

Show available docker image on the server.

docker-compose images
docker images

Show available docker image

A new custom docker image for our Nodejs application has been created.

Show the running docker service.

docker-compose ps
docker ps

Show the running docker service

The Nodejs app is up and running on the host port 3000.

Open the web browser and type the server IP address with the port.

http://10.0.15.2:3000/

And you will get the simple express page.

Page is working

Dockerizing Nodejs Express application on Ubuntu 18.04 has been completed successfully.

Reference

Share this page:

0 Comment(s)