Going All-in-One with Docker
It’s basically encapsulation with extra step, that’s all.
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
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.
Purchase Reminder Software Architecture
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!