Docker Si Paus Biru

Luthfi Dzaky
PPL D7 — Fasilkom UI
3 min readApr 16, 2019
Image result for docker
Docker

Dalam membangun program, pengembang biasanya menjalankan virtualisasi pada server sehingga proses pembuatan program dapat berjalan pada berbagai platform maupun konfigurasi hardware. Masalah yang dihadapi dengan virtualisasi adalah perlunya menyiapkan satu sistem operasi secara utuh, termasuk berbagai aplikasi yang dibawa sistem tersebut. Bisa dibayangkan dengan banyaknya virtualisasi yang berjalan di sebuah server akan memberatkan sistem tersebut. Apalagi size dari virtualisasi tersebut biasanya besar.

Nah datanglah paus biru dengan membawa sekumpulan Container, yaitu Docker. Docker adalah sebuah aplikasi yang berfungsi sebagai wadah/container untuk “mengepak” sebuah software secara lengkap beserta semua hal lainnya yang dibutuhkan oleh software tersebut dapat berfungsi, seperti library dan konfigurasi yang diperlukan. Pengaturan software beserta file/hal pendukung lainnya akan menjadi sebuah Image (istilah yang diberikan oleh docker). Kemudian sebuah instan dari Image tersebut kemudian disebut Container. Maka dari itu, logo dari Docker seperti di atas, yaitu berupa kumpulan Container yang merepresentasikan bahwa Docker dapat menggunakan base image apapun, seperti Node yang kelompok kami pakai.

Loh sama dong dengan VM? Beda dong

Berbeda dengan VM yang mana aplikasi berjalan di atas guest OS, docker dapat menjalankan aplikasi langsung tanpa hal tadi. Hal tersebut memungkinkan kita untuk menjalankannya di berbagai OS, seperti Linux, Windows, ataupun MacOs.

Docker Orchestration

Orchestration

Layaknya sebuah orkestra, kita sebagai developer yang menentukan urutan berjalannya sebuah “seni” deploying menggunakan Docker. Seperti, mengatur base image apa yang akan dipakai, port yang akan dijalankan, script apa yang mau dijalankan, dan command apa yang ingin dijalankan setelah semua itu dilakukan, dan semua itu tertulis pada sebuah tulisan bernama… Dockerfile

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 merupakan salah satu Dockerfile untuk bagian back-end kami. Terlihat pada file diatas Image akan dijalankan pada base image Node, lalu pada NPM Install akan mengikuti package.json pada folder service. Setelah itu akan menggunakan port 8001, lalu di akhir akan menjalankan command node server.js yang berfungsi untuk menjalankan API yang telah kami buat sebelumnya.

Berikut isi registry hasil Dockerfile pada back-end kami:

Kurang lebih flownya akan berjalan seperti gambar berikut:

Kita sebagai developer, yaitu client dimana akan menjalankan build, dengan mengirim perintah ke docker_host melalui gitlab-ci, lalu pada fle tersebut kita juga melakukan perintah untuk melakukan push pada registry, yaitu registry khusus PPL yang private. Biasanya registry di push pada registry docker, yaitu Docker Hub. Lalu untuk membuat container, di portainer kami melakukan pull image ke registry PPL untuk membuat container.

Secara default, seperti yang telah dijelaskan sebelumnya container akan terisolasi dengan container lain dan OS kita. Namun, kita bisa mengatur sendiri bagaimana hubungan antara container satu dengan yang lainnya. Untuk penjelasan lebih lanjutnya bisa mengunjungi https://docs.docker.com/network/ untuk pengaturan hubungan container dan OS maupun container lainnya, seperti pada dua container kami yang dibagi menjadi dua yaitu untuk WebApp dan Service.

Jika bagian frontend ditampilkan lalu membutuhkan bagian back-end maka akan ditembak melalui URL API dari port docker.ppl.cs.ui.ac.id:24576. Port tergantung pengaturan pada portainer.

Sekian penjelasan dari saya, semoga bermanfaat!

Luthfi Dzaky Saifuddin

--

--