Nur Hamim
Nur Hamim Anak desa yang gemar berkomunitas, suka menulis dan mencari hal baru seputar Unix/Linux dan Cloud. Saat ini sedang menempuh pendidikan S1 TI di Unindra dan kebetulan bekerja di PT Biznet GIO Nusantara

Docker: Cara Konfigurasi Load Balance Untuk Aplikasi Node.JS (dockerized)


Docker: Cara Konfigurasi Load Balance Untuk Aplikasi Node.JS (dockerized)

Belajar Linux ID - Docker merupakan sebuah project open-source yang menyediakan platform terbuka untuk developer maupun sysadmin untuk dapat membangun, mengemas, dan menjalankan aplikasi dimanapun sebagai sebuah wadah (container) yang ringan.

Di tutorial ini kami akan memberikan cara bagaimana menjalankan aplikasi nodejs di docker dan bagaimana cara membuat load balancer nginx menggunakan docker.

Load balancer yang digunakan pada tutorial kali ini yaitu Nginx yang di run menggunakan docker, dimana tugas dari LB ini yaitu mendistribusikan lalu lintas masuk secara efisien ke seluruh grup server backend yang dikenal sebagai server pool. Load Balancer bertindak sebagai “traffice cop” yang duduk di depan server backend Anda, merutekan permintaan klien di semua server yang mampu menangani permintaan dengan cara yang memaksimalkan kecepatan dan memastikan bahwa tidak ada satu server pun yang bekerja terlalu keras, yang akan menurunkan kinerja atau degrade performance.

Topologi

Topologi yang digunakan pada tutorial kali ini sebagai berikut:

Catatan:

Disini kami menggunakan 3 container, 2 untuk Node.js 1 untuk Nginx. Container Node.js akan berjalan di port host 5001 dan 5002 yang masing-masing di mapped atau dipetakan ke container port 5000 (Nginx).

Persiapan

  • Sudah terinstall Docker
  • Sudah terinstall npm

Baca Juga:

Tahapan

Tahap Pertama

Membuat direktori untuk project node.js dan membuat aplikasi sederhana menggunakan node.js

1
2
root@hamim-lab-belajarlinux:~# mkdir project-nodejs/
root@hamim-lab-belajarlinux:~# cd project-nodejs/

Membuat aplikasi node.js sederhana

1
root@hamim-lab-belajarlinux:~/project-nodejs# vim app.js
1
2
3
4
5
6
7
8
9
10
11
const express = require('express')
const app = express()
const port = 5000
const name = process.env.name || "World"

    app.get('/', (req, res) => {
        res.send(`Hello ${name} !`)
    })
app.listen(port, () => {
    console.log(`Server Started on Port  ${port}`)
})

Membuat Dockerfile yang digunakan untuk atau sebagai images node.js

1
root@hamim-lab-belajarlinux:~/project-nodejs# vim Dockerfile
1
2
3
4
5
6
7
FROM node
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD node app.js
EXPOSE 5000

Membuat images docker node.js dengan cara menjalankan perintah berikut

1
root@hamim-lab-belajarlinux:~/project-nodejs# docker build -t nodeapp:001 .

Tunggu sampai selesai, dan cek images container nodejs yang baru saja dibuat

1
2
3
4
5
root@hamim-lab-belajarlinux:~/project-nodejs# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nodeapp      001       22ef3e5f6500   39 seconds ago   1.01GB
node         latest    baeb96d69092   39 hours ago     998MB
root@hamim-lab-belajarlinux:~/project-nodejs#

Tahap Kedua

Selanjutnya membuat 2 container nodejs dengan skema yang ada di topologi apps1 run port 5001 dan apps2 run port 5002 sebagai berikut:

1
2
3
4
5
6
root@hamim-lab-belajarlinux:~/project-nodejs# docker container run -p 5001:5000 --name helloblid -d nodeapp:001
910a13ce3e79ad417140957613bbbbf9b58829c4398578f7e00fb9ac7fe3faf6
root@hamim-lab-belajarlinux:~/project-nodejs#
root@hamim-lab-belajarlinux:~/project-nodejs# docker container run -p 5002:5000 --name customized -e "name=belajarlinuxid" -d nodeapp:001
e96e0b30f42771bee467bc3962a988baa2c368ff1defb05f1d94b0b37d35d606
root@hamim-lab-belajarlinux:~/project-nodejs#

Cek container yang baru saja dibuat

1
2
3
4
5
root@hamim-lab-belajarlinux:~/project-nodejs# docker container ls
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                       NAMES
e96e0b30f427   nodeapp:001   "docker-entrypoint.s…"   12 seconds ago   Up 12 seconds   0.0.0.0:5002->5000/tcp, :::5002->5000/tcp   customized
910a13ce3e79   nodeapp:001   "docker-entrypoint.s…"   57 seconds ago   Up 56 seconds   0.0.0.0:5001->5000/tcp, :::5001->5000/tcp   helloblid
root@hamim-lab-belajarlinux:~/project-nodejs#

Akses aplikasi menggunakan browser dengan port contoh ip:5002

Tahap Ketiga

Berikut-nya membuat load balancer dengan nginx menggunakan docker, silakan membuat direktori nginx dan membuat file Dockefile untuk images load-balance-nginx.

1
2
root@hamim-lab-belajarlinux:~# mkdir project-nginx/
root@hamim-lab-belajarlinux:~# cd project-nginx/

Membuat Dockerfile

1
root@hamim-lab-belajarlinux:~/project-nginx# vim Dockerfile
1
2
3
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf

Membuat konfigurasi load balance Nginx

1
root@hamim-lab-belajarlinux:~/project-nginx# vim nginx.conf
1
2
3
4
5
6
7
8
9
10
11
upstream loadbalance {
    least_conn;
    server 10.2.4.43:5001;
    server 10.2.4.43:5002;
}

server {
    location / {
        proxy_pass http://loadbalance;
    }
}

Membuat image docker load-balance-nginx

1
root@hamim-lab-belajarlinux:~/project-nginx# docker build -t nginxbalancer:001 .

Tunggu proses sampai selesai.

Jika sudah silakan cek images load-balance-nginx yang sudah dibuat

1
2
3
4
5
6
7
root@hamim-lab-belajarlinux:~/project-nginx# docker images
REPOSITORY      TAG       IMAGE ID       CREATED              SIZE
nginxbalancer   001       22f25dfbebd9   About a minute ago   142MB
nodeapp         001       22ef3e5f6500   11 minutes ago       1.01GB
node            latest    baeb96d69092   39 hours ago         998MB
nginx           latest    1403e55ab369   2 weeks ago          142MB
root@hamim-lab-belajarlinux:~/project-nginx#

Kemudian membuat container load-balance-nginx yang running di port 5000

1
2
3
root@hamim-lab-belajarlinux:~/project-nginx# docker container run -p 5000:80 -d nginxbalancer:001
c5343ad95e4366bb7afc08a4329a6ec3313549bda77641d17a2f02aac9b7df94
root@hamim-lab-belajarlinux:~/project-nginx#

Cek container yang sudah dibuat

1
2
3
4
5
6
root@hamim-lab-belajarlinux:~/project-nginx# docker container ls
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                       NAMES
c5343ad95e43   nginxbalancer:001   "/docker-entrypoint.…"   6 seconds ago    Up 5 seconds    0.0.0.0:5000->80/tcp, :::5000->80/tcp       agitated_faraday
e96e0b30f427   nodeapp:001         "docker-entrypoint.s…"   9 minutes ago    Up 9 minutes    0.0.0.0:5002->5000/tcp, :::5002->5000/tcp   customized
910a13ce3e79   nodeapp:001         "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   0.0.0.0:5001->5000/tcp, :::5001->5000/tcp   helloblid
root@hamim-lab-belajarlinux:~/project-nginx#

Saat ini load balancer Nginx sudah running, silakan akses melalui browser ip:5000 dan silakan refresh nantinya akan berubah tampilan sesuai source dari aplikasi nodejs.

Contoh Satu

Contoh Dua

Contoh Tiga

Sampai disini kita sudah berhasil mencoba load balance nginx di docker untuk aplikasi node.js

Selamat mencoba 😁

comments powered by Disqus