Going All-in-One with Docker

Ibnu Firdaus
PPL D7 — Fasilkom UI
4 min readApr 17, 2019

It’s basically encapsulation with extra step, that’s all.

Double-Decker Bus

Problems : A good thing to start your day

Sebagai software developer, kita akan selalu membuat sebuah produk (atau setidaknya mengembangkan sebuah iterasi). Pada zaman sekarang ini development tersebut berjalan dengan sangat cepat. Sebuah iterasi, dari planning hingga review dapat terjadi dalam rentang waktu yang cukup singkat, bahkan dalam hitungan hari. Oleh karena itu, dibutuhkan suatu metode deployment yang dapat mengakomodasi hal itu. Kita tidak bisa lagi melakukan penyettingan server, OS, hinggal library pendukung secara manual untuk setiap iterasi. It just took a damn long time!.

Oleh karena itu, hadirlah docker untuk mengatasi hal tersebut.

Docker : A better problem to start your day

Docker Image, literally image

Dikutip dari wikipedia :

Docker is a computer program that performs operating-system-level virtualization

Berangkat dari definisi tersebut, Docker dapat dianggap sebagai sebuah OS (dalam tanda kutip, tentunya) yang dapat menjalankan sebuah atau sekumpulan program layaknya sebuah OS sebenarnya, tapi bohong… hehehe…

yang dimaksud dengan OS-level virtualization pada intinya adalah pembuatan sebuah objek atau instances pada sebuah OS, dimana objek tersebut dapat bertindak layaknya berada pada ‘OS’-sendiri, terpisah dari OS host nya. Dalam kata lain, apa yang kita buat di docker dapat dijalankan pada Linux, Windows, dan MacOS, dan cenderung tidak memiliki perbedaan yang signifikan.

Dalam dunia per-dock(t)er-an, dikenal istilah containers, container bisa dibilang sebagai sebuah ‘software packages’ yang berisi program-program yang kita buat dan ingin dijalankan pada server. Tiap container, walaupun berada pada satu host yang sama, terisolasi dari container-container lainnya dan memiliki bundle nya sendiri yang berisi app, tools, dan library yang dibutuhkan oleh program yang ada didalamnya.

Docker Configuration : description is supposed to be placed here

Untuk dapat melakukan pen-docker-an terhadap sofware yang dibuat, tentunya kita harus melakukan beberapa hal untuk dapat melakukan hal itu. Karena software yang kita buat masih berbentuk sebuah container yang literally sebuah container, hanya sebuah box padat yang perlu kita olah lagi. Dan seperti gitlab-ci.yml pada Gitlab, docker juga memiliki hal yang fungsionalitasnya kurang lebih sama, yaitu Dockerfile.

Berikut adalah potongan kode dari Dockerfile proyek kami :

FROM node:8-alpine

RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app

WORKDIR /home/node/app

COPY package*.json ./

USER node

RUN npm install --production

COPY --chown=node:node . .

EXPOSE 8001

CMD [ "node", "server.js" ]

Berikut adalah detail hasil deploy ke portainer milik Fasilkom UI.

Image Details
Dockerfile details
Image Layers

Purchase Reminder Software Architecture

Flow of Purchase Reminder Interaction (Happyfresh logo © Happyfresh)

Kurang lebih inilah arsitektur dari software yang kami buat. Berikut adalah penjelasan dari alur interaksi antar komponen :

Backend Section

Seluruh dataset awal yang berisi riwayat pembelanjaan user dimasukan kedalam database Order History. Lalu diajalankan algoritma Estimate Reminder Product yang memproses seluruh data yang ada pada database Order History. Hasil prediksi ini disimpan pada database Prediction Date.

data yang ada pada database Prediction Date ini akan dipanggil oleh API Product Recommendation untuk diubah menjadi data product dengan bantuan API HappyFresh. Data inilah yang akan dikirim ke front-end.

User Section

Saat user masuk ke dalam situs Mobile Web HappyFresh. Sistem secara otomatis akan memanggil API Product Recommendation untuk mendapatkan daftar barang reminder. Data ini kemudian ditampilkan di section khusus di front page dan cart page.

Saat user checkout, maka daftar pembelanjaan yang dibeli akan dikirim ke sistem untuk ditambahkan ke database riwayat pembelian di database Order History. Setelah itu, sistem melakukan prediksi ulang untuk melakukan adjustment terhadap behaviour pembelanjaan user. Barang yang diprediksi adalah barang yang dibeli oleh user pada session itu.

Cukup sekian blog kali ini, semoga at least setidaknya a little bit sedikit dapat memberi pencerahan pada teman-teman semua mengenai Docker.

See you next time!

--

--