Deploy Aplikasi Node.js ke Docker Container, Docker dan Node.js keduanya merupakan teknologi yang sedang nge-hype saat ini, Docker yang merupakan sebuah container dan node.js yang merupakan sebuah javascript runtime, dengan Docker anda bisa melakukan proses deployment aplikasi node.js menjadi lebih mudah, anda bisa menjalankan aplikasi anda seperti biasanya namun bedanya aplikasi yang anda jalankan berada dalam sebuah container, dalam container ini telah tersedia depedency, pustaka, dan anda juga bisa mengunduh paket yang anda butuhkan, pada environtment container ini aplikasi akan berjalan secara konsisten, ketika anda menjalankannya di server development, staging ataupun production aplikasi akan berjalan sama persis, jadi tidak ada kata ” di lokal jalan kok bro 😀 ”
Membuat Aplikasi Node.js Sederhana
jika anda belum memasang Node.js sebelumnya, silahkan merujuk ke pranala ini install nodejs via package manager, setelah anda memasangnya buat direktori halonodejs dan lakukan iniliasi npm
$ mkdir halonodejs $ cd halonodejs $ npm init package name: (halonodejs) version: (1.0.0) description: aplikasi nodejs sederhana entry point: (index.js) app.js test command: git repository: keywords: author: taufik license: (ISC) MIT About to write to /home/nothinux/Development/nodejs/halonodejs/package.json: { "name": "halonodejs", "version": "1.0.0", "description": "aplikasi nodejs sederhana", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "taufik", "license": "MIT" } Is this OK? (yes) yes
lalu akan membuat sebuah berkas package.json, masih dalam direktori halonodejs kita akan menambahkan express dan memasangnya pada proyek halonodejs
$ npm install express --save
lalu kita buat aplikasinya yang bernama app.js
var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Halo Node.js!'); }); app.listen(3000, function () { console.log('aplikasi berjalan pada port 3000!'); });
lalu coba jalankan dengan perintah
$ node app.js
Membuat Dockerfile
selanjutnya kita akan membuat sebuah image yang nantinya kita sertakan juga aplikasi yang dibuat node.js tadi, kita kan menggunakan base image nodejs 11.4.0 yang menggunakan alpine linux agar image lebih ramping
FROM node:11.4.0-alpine WORKDIR /app COPY package.json /app RUN npm install COPY . /app CMD ["node", "app.js"] EXPOSE 3000
pada intruksi Dockerfile diatas saya menyetel ruang kerja ke /app, menyalin packake.json dan menjalankan npm install, kenapa tidak menyalin semuanya langsung kenapa hanya package.json saja, agar saat anda melakukan build lagi docker akan menggunakan cache dengan catatan berkas package.json belum berubah, selanjutnya baru kita menyalin aplikasinya ke direktori /app lalu menjalankan aplikasinya dan tidak lupa meng-expose port yang digunakan
build dengan perintah berikut
$ sudo docker build -t taufik/halonodejs:1.0 .
lalu kita coba jalankan
$ sudo docker run -d --name halonodejs -p 3000:3000 taufik/halonodejs:1.0
dengan perintah diatas kita menjalankan container dengan nama halonodejs dengan port 3000 dari image taufik/halonodejs:1.0 dalam mode detach, bisa kita cek apakah container telah berjalan dengan perintah berikut
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5283ea7333f8 taufik/halonodejs:1.0 "node app.js" 10 minutes ago Up 10 minutes 0.0.0.0:8080->3000/tcp halonodejs
kita juga bisa coba akses port 3000 menggunakan curl
$ curl localhost:3000 Halo Node.js!