Salah satu kendala yang paling awal saat dihadapi oleh tim developer pada saat melakukan pengembangan app adalah kekhawatiran jika aplikasi yang mereka kembangkan tidak berjalan secara sempurna ketika ketika dideploy. Perbedaan konfigurasi di environment milik seorang developer dengan server atau dengan developer yang lain merupakan penyebab utamanya. Hal ini juga sering dirasakan oleh sysadmin ketika mereka hendak mengupdate kernel. Ada beberapa app dalam server mereka jadi bermasalah karena belum mendukung kernel terbaru.

Sebenarnya solusi untuk permasalahan ini sudah ada sejak lama dengan hadirnya teknologi virtualisasi. Ada dua macam teknologi virtualisasi yaitu virtual machine dan container. Apa saja perbedaan dua teknologi virtualisasi ini? Mari kita kupas satu per satu dari teknologi virtualisasi tersebut.

 

Apa itu Virtual Machine

Virtual machine (VM) adalah sebuah emulasi dari sebuah sistem komputer. Secara sederhana, virtual machine membuat kita bisa membagi resource hardware dari satu hardware fisik menjadi beberapa sistem komputer.

Sebagai contoh, kita memiliki satu PC yang memiliki prosesor dengan 4 core, RAM sebesar 8 GB serta harddisk 500GB misalnya. Tanpa VM tentu kita hanya bisa menginstall 1 OS atau beberapa OS tapi tak bisa berjalan bersamaan. Dengan VM, kita bisa membagi sistem komputer menjadi dua masing-masing memiliki prosesor 2 core,  RAM 4GB, serta harddisk 250GB dan tentu saja pembagian resource hardware tidak harus sama rata. Dengan ini, maka kita dapat menginstall OS di setiap sistem komputer dan dapat menjalankannya secara bersamaan sehingga kita seolah memiliki 2 PC yang berbeda.

Teknologi ini sering digunakan untuk server dan memunculkan istilah Virtual Private Server (VPS) tapi sedikit pula digunakan oleh app developer karena project yang sedang dikerjakannya memiliki platform yang berbeda dengan platform yang dimiliki.

 

Keunggulan VM

  • Resource hardware yang eksklusif sehingga tidak terganggu jika ada apps yang lain tiba-tiba membutuhkan resource yang tinggi
  • Memiliki management tools dan security tools yang sudah matang
  • Secara umum memiliki tingkat keamanan sedikit lebih tinggi bila dibandingkan dengan container

 

 

Apa Itu Container

Berbeda dari VM, container adalah sebuah virtualisasi OS yang dapat membungkus suatu aplikasi beserta dependency dan environment-nya. Setiap container ini memiliki process yang terisolir sehingga tidak mengganggu host OS ataupun container yang lain. Prinsip container ini mirip dengan kontainer yang ada di kapal kargo di mana kapal kargo tersebut diibaratkan sebagai sistem komputer.

Jika dibandingkan dengan VM, secara pengaturan kontainer lebih mudah. Hal ini disebabkan karena konsep berbagi resource hardware dari container lebih fleksibel bila dibandingkan VM. Sebagai contoh, tadi disebutkan bahwa kita mempunyai 1 PC dengan 4 Core, RAM 8 GB, dan storage sebesar 500GB. Katakanlah kita mempunyai 2 container dengan kebutuhan RAM berbeda. Beberapa apps dalam container A membutuhkan RAM 5GB sedangkan apps dalam container B membutuhkan RAM 2GB. Dengan container, kita tak perlu menset kebutuhan hardware resource setiap container karena berada dalam satu sistem komputer. Sementara jika kita memakai VM dengan hardware resource yang sudah kita bagi sama rata seperti disebutkan di contoh sebelumnya, kita tidak mungkin memasang apps di container A di salah satu sistem komputer karena RAM maksimal yang bisa kita pakai hanyalah 4GB.

Faktor portabilitas juga menjadi kelebihan yang dimiliki oleh container. Para developer bisa membagikan container dengan format ISO image ke setiap perangkat yang dia pakai ataupun ke developer lain.

 

Platform Container

Linux Containers (LXC)

Platform ini merupakan cikal bakal lahirnya container. Linux Containers (LXC) ini adalah virtualisasi OS yang memungkinkan kita menjalankan beberapa sistem Linux di dalam satu sistem komputer secara bersamaan. Tentu saja platform ini hanya berlaku untuk Linux saja.

Docker

Pada awalnya, project pertama Docker adalah membangun single app LXC container, mengenalkan beberapa perubahan pada LXC sehingga lebih portabel dan fleksibel. Lama-kelamaan Docker berkembang hingga memiliki container runtime sendiri.

 

Keunggulan Container

  • Fleksibel dan scalable
  • Mengurangi resource yang dibutuhkan dalam IT Management
  • Waktu yang dibutuhkan untuk mengemas dan memasang app dalam container lebih cepat bila dibandingkan dengan VM

 

 

VM vs Container (Final Round)

Secara singkat, perbedaan antara VM dan Docker dapat dijabarkan dalam tabel berikut :

 

Virtual Machine

Container

Berat

Ringan

Performa terbatas pada konfigurasi VM

Performa maksimum tergantung pada hardware fisik

Virtualisasi pada level hardware

Virtualisasi pada level OS

Waktu start up dalam hitungan menit

Waktu start up dalam hitungan detik

Terisolasi penuh pada level hardware sehingga lebih aman

Terisolasi pada level proses

 

Tentu jika melihat rangkuman perbedaan antara VM dan Docker pada tabel di atas kita tahu bahwa VM dan container memiliki fungsi masing-masing. Untuk project yang bersifat monolitik di mana setiap apps yang kita kembangkan membutuhkan environment dan dependencies yang tidak terlalu berbeda maka menggunakan VM lebih bijak. Akan tetapi jika kita menggunakan arsitektur microservices dalam pengembangan software, penggunaan container lebih dianjurkan.

***

Jika Anda tertarik dalam pengembangan software dengan arsitektur microservice menggunakan Docker dan Kubernetes, Anda dapat mengikuti workshop cloud native di Inixindo Jogja.