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 😁