Untuk menjalankan suatu aplikasi server dibutuhkan sebuah komputer. Dahulu, satu aplikasi dijalankan oleh satu komputer dengan mempertimbangkan spesifikasi dan interface yang tersedia. Namun bisa dibayangkan apa yang terjadi ketika kita memiliki banyak aplikasi. Selain biaya, juga dibutuhkan tempat yang besar.
Selain itu, ketika aplikasi semakin berkembang dan membutuhkan tambahan spesifikasi pada komputer yang menjalankan aplikasi tersebut, akan membutuhkan downtime yang cukup lama. Hal ini dikarenakan hal yang di-upgrade adalah hardware-nya. Anda harus mencari komponen dan membelinya, lalu dipasang dan dicoba pada mesin fisik.
Berbagai limitasi yang telah disebutkan melahirkan inovasi yang bernama virtualisasi. Berdasarkan KBBI, virtual memiliki 3 arti yaitu :
- (secara) nyata;
- mirip atau sangat mirip dengan sesuatu yang dijelaskan;
- tampil atau hadir dengan menggunakan perangkat lunak komputer.
Sehingga virtualiasi komputer secara nyata komputer tersebut ada dan berfungsi, sangat mirip dengan yang dijalankan secara fisik (baremetal), dan hadir melalui perantara perangkat lunak (software).
Untuk menjalankan virtualisasi dibutuhkan resource yang besar, sehingga yang digunakan adalah komputer server dengan spesifikasi tinggi, sehingga tidak akan berkendala jika harus menjalankan berbagai macam virtual machine dengan aplikasinya masing-masing.
Platform untuk menjalankan virtualisasi dikenal dengan sebutan hypervisor. Hypervisor berfungsi untuk memanage Virtual Machine (VM), mulai dari membuat, memonitor, modifikasi, hingga menghapus. Hypervisor terbagi menjadi 2 jenis yaitu Hypervisor tipe 1 atau biasa disebut baremetal contohnya VMWare ESXi atau Proxmox VE, dan hypervisor tipe 2 atau disebut hosted hypervisor contohnya VirtualBox.
baremetal artinya hypervisor di-install langsung ke komputer fisik dan berjalan seperti OS, sementara hosted artinya hypervisor di-install sebagai software di dalam sebuah OS.
Dalam Virtualisasi terdapat 2 jenis mesin, yaitu Host Machine dan Guest VM. Host machine adalah “tuan rumah” atau komputer/OS tempat hypervisor berjalan. Sementara Guest VM adalah Virtual Machine yang berjalan di atas Host Machine dan diatur oleh hypervisor.
Melakukan instalasi VM bisa dengan 2 cara : menggunakan ISO seperti Install OS pada umumnya, atau melalui import template yang sudah disediakan. Untuk template VM, bisa dicari di laman https://www.turnkeylinux.org/ atau sesuai dengan ketersediaan.
VM memiliki virtual hardware-nya sendiri seperti sebuah komputer fisik. Jadi sebuah VM memiliki Processor, RAM, Storage, dan Network Interface virtual yang dapat diatur melalui hypervisor. Hal ini memungkinkan anda menjalankan VM Linux di atas host berbasis Windows, ataupun sebaliknya, menjalankan Guest VM Windows di atas Linux Host.
Virtual Machine bersifat fleksibel. Kapasitas storage maupun resource dapat ditingkatkan sesuai dengan kebutuhan. Tidak perlu downtime yang lama dan konfigurasi hardware yang memakan waktu, hanya tinggal ubah dari menu VM setting, lalu reboot. Tentu saja selama hardware Host Machine memungkinkan.
Namun dibalik kelebihannya, virtualisasi juga memiliki kelemahan. Salah satu kelemahan dalam virtualisasi adalah overhead. Proses menjalankan virtualisasi memakan waktu dan resources yang tidak sedikit. Hal ini karena hypervisor mem-virtual-kan seluruh hardware yang ada dalam sebuah PC yang akan digunakan untuk menjalankan VM.
Selain overhead tersebut, juga ada kendala dalam menjalankan sebuah aplikasi. Contoh : Developer membuat aplikasi web yang berjalan dengan baik di VM dalam PC-nya, namun ketika di-implementasikan di VM server, aplikasi tersebut tidak bisa berjalan dengan baik. Mengapa hal itu bisa terjadi? Hal ini dikarenakan aplikasi tersebut bagaikan berjalan di atas 2 PC yang berbeda sehingga bisa saja terjadi kekurangan dalam hal library maupun dependency yang harus di-install agar dapat menjalankan aplikasi tersebut. Overhead dan kendala tersebut yang membuat munculnya inovasi selanjutnya yaitu container.
Berbeda dengan virtual machine, container tidak memiliki “virtual hardware”. Container hanya memisahkan process dari host process. Container berjalan memanfaatkan menggunakan kernel milik host, jadi tidak ada overhead dalam virtualisasi hardware maupun kernel. Namun keterbatasan container adalah hanya bisa dijalankan pada VM/OS dengan kernel yang sama. Jadi untuk saat ini container hanya bisa dijalankan pada VM/PC berbasis Linux. Selama versi kernel yang dijalankan sesuai dengan minimum requirements, container pasti bisa beroperasi. Gambaran container dapat dilihat pada gambar ini.
Setiap container memiliki library/dependency sendiri dan aplikasinya sendiri. Container bisa berjalan layaknya OS biasa/clean dan ditambahkan library/dependency tergantung service apa yang akan dijalankan di dalamnya. Karena memiliki library tersendiri, container juga dapat digunakan untuk men-deliver aplikasi lengkap dengan library yang dibutuhkan, sehingga tidak ada lagi perbedaan menjalankan aplikasi di Host manapun. Instalasi container pada Linux cukup mudah, bisa menggunakan Docker ataupun menggunakan template (pada Proxmox VE).
Docker adalah software yang berfungsi sebagai container orchestration. Jadi docker adalah software yang mengatur dan menjalankan berbagai container sehingga dapat menjalankan satu aplikasi full. Container yang dijalankan adalah container yang sudah berisi aplikasi tertentu lalu dihubungkan melalui kode konfigurasi yang dituliskan dalam file docker-compose.yaml
.
Contoh penggunaan docker : Saya ingin menjalankan aplikasi SSO (Single Sign On) dan membutuhkan LDAP (Lightweight Directory Access Protocol) sebagai backend, Keycloak sebagai identity provider, Nginx sebagai webserver-nya. Untuk menjalankan hal tersebut, saya tidak perlu lagi melakukan instalasi satu per satu aplikasi yang dibutuhkan, karena setiap aplikasi yang saya sebutkan, sudah ada dalam bentuk container (dapat dicari di docker hub).
Sehingga saya hanya perlu menulis kode konfigurasi di docker-compose.yaml
yang berisi container apa saja yang saya butuhkan, bagaimana mapping directory, dan port yang digunakan untuk setiap container berkomunikasi. Selanjutnya tinggal menjalankan command docker-compose up
dan aplikasi SSO tadi dapat berjalan.
Itu adalah gambaran singkat mengenai hubungan antara Mesin, Virtualisasi, dan Container (sedikit Docker). Semoga bisa memberikan gambaran dan memberikan ide oprekan. Selamat ngoprek.
Terimakasih, mantap