
Containerization
1. Pengertian Containerization itu sendiri adalah pendekatan dimana kita menjalankan multiple instances (containers) pada satu Operating System (OS) yang sama, dimana containers tersebut akan memiliki shared kernel. Serupa dengan VM, dimana pada satu Host OS kita dapat menjalankan berbagai aplikasi lain yang terisolasi dari Host kita. Perbedaan utama antara virtualization dan containerization adalah pada virtualization kita menyalakan OS di dalam OS, sehingga secara resource dan performance akan lebih berat dibandingkan dengan containerization yang melakukan isolasi dari masing-masing aplikasi ke dalam virtual environment dengan shared kernel milik host. Tetapi bukan berarti virtualization adalah teknologi yang buruk, sebenarnya kedua teknologi tersebut memiliki tujuan yang sedikit berbeda. Kalau kita ingin memiliki environment yang sangat terisolasi satu sama lain, maka sebaiknya kita menggunakan VM. Apabila kita tidak perlu isolasi 100% maka containerization bisa menjadi pertimbangan.
2. Containerization terdapat 2 jenis kontainer yang umum dapat kita pergunakan, yaitu [referensi]:
1. Kontainer berbasis sistem operasi (OS Container), yakni kontainer yang memberikan isolasi pada level sistem operasi dan memanfaatkan kernel yang sama dari suatu induk, contohnya adalah LXC, OpenVZ, Linux VServer, BSD Jails and Solaris zones.
2. Kontainer berbasis aplikasi (Application Container), yakni kontainer yang memberikan isolasi pada level aplikasi dengan memanfaatkan beberapa komponen yang ada pada sistem operasi induk, ditambah beberapa komponen pada kontainer-kontainer lain yang menjadi basis dari berjalannya sebuah aplikasi, contohnya adalah Docker dan Rocket (rkt).
Berikut diagram yang menjelaskan perbedaan antara virtualisasi, kontainer berbasis sistem operasi, dan kontainer berbasis aplikasi.
Containerization Virtualisasi
Pada lingkungan virtualisasi, vendor (penyedia alat virtualisasi) melakukan abstraksi untuk lapisan hardware dan kernel, sehingga mesin yang berjalan pada virtualisasi seolah-olah merupakan mesin terpisah yang hanya memanfaatkan hardware yang tersedia pada lingkungan induk dengan kernelnya sendiri. Walaupun terdapat teknologi virtualisasi tertentu dimana mesin induk tidak perlu memiliki OS, seperti pada native/ bare-metal hypervisor. Virtualisasi termasuk dalam perbandingan karena masih banyak praktisi teknologi informasi yang bertanya-tanya apa bedanya kontainer dengan virtualisasi, karena memang ada satu kesamaan kegunaan secara mendasar, yaitu memberikan lingkungan yang terisolir untuk suatu sistem namun dengan pendekatan yang berbeda.
Keunggulan dari virtualisasi yang paling utama adalah dapat diimplementasikan pada jenis sistem operasi apapun karena sifatnya yang umum (general), yaitu tidak terikat dengan satu jenis kernel tertentu. Misalnya memvirtualisasi sistem operasi Windows pada induk Linux Ubuntu. Namun jelas ada overhead yang yang besar pada teknologi virtualisasi karena teknologi tersebut mengabstraksi lapisan hardware dan kernel induk sehingga sistem-sistem virtual yang berada didalamnya sedikit banyak akan mengalami penurunan performa karena secara otomatis sistem virtual harus menyediakan kernel sendiri yang “tertancap” pada abstraksi dari hasil virtualisasi tersebut, tidak secara native “tertancap” pada hardware dan kernel sang induk.
Namun demikian, bukan berarti sistem virtualisasi ini sudah ditinggalkan, masih banyak yang memanfaatkan teknologi ini, bahkan masih dipergunakan oleh pengembang yang menggunakan teknologi kontainer sekalipun, yaitu apabila kita melakukan development sistem berbasis kontainer pada induk non Linux, misal Windows atau MacOS. Karena tidak mungkin Linux container berjalan secara native pada induk non Linux, yang sudah jelas memiliki kernel yang berbeda. Namun dewasa ini deployment aplikasi atau service dalam fase produksi, teknologi virtualisasi sudah hampir tidak pernah dipergunakan karena overhead yang besar berdampak penurunan performa yang signifikan. Apalagi untuk service yang berbasis cloud atau web, hampir seluruhnya menggunakan server berbasis sistem operasi Linux, hanya sebagian kecil yang masih menggunakan Windows server, dengan demikian teknologi virtualisasi tidak lagi diperlukan pada mesin server tersebut.
Containerization Sistem Operasi
Kontainer berbasis sistem operasi merupakan teknologi kontainer yang memperlakukan kontainer-kontainer didalamnya sebagai satu kesatuan sistem secara utuh seolah-olah dalam satu sistem operasi tersendiri secara terisolasi. Misalnya pada gambar sebelumnya Service A merupakan MySQL versi 5.6 dan Service B merupakan node.js versi 4.x, dan Service C dan D masing-masing adalah aplikasi atau service yang membutuhkan Service A dan B. Dengan pemanfaatan teknologi kontainer berbasis sistem operasi dan pendekatan arsitektur yang umum dipergunakan pada teknologi tersebut, masing-masing kontainer memiliki sistem operasi, MySQL, dan node.js terpisah secara utuh dan terisolasi satu sama lain.
Keunggulan dari teknologi ini salah satunya adalah keunggulan dari teknologi kontainer itu sendiri secara umum, yakni dengan menawarkan fitur yang mirip virtualisasi namun dengan peningkatan performa yang cukup signifikan karena tidak ada overhead dari sistem virtualisasi dan memanfaatkan kernel dan hardware dari induk secara native. Sedangkan kelemahan teknologi ini juga sama dengan kelemahan teknologi Linux container pada umumnya yaitu tidak dapat dijalankan pada sistem operasi selain linux karena perbedaan kernel, sehingga tetap diperlukan virtualisasi saat menjalankan kontainer pada sistem operasi selain linux.
Teknologi ini banyak dipakai sebagai infrastruktur pada shared hosting dan virtual private server karena sifatnya yang high performance serta memiliki lingkungan yang terisolasi antara kontainer satu dengan yang lain.
Containerization Aplikasi
Kontainer berbasis aplikasi adalah teknologi yang belakangan ini ramai diperbincangkan, karena adanya vendor yakni Docker yang menawarkan teknologi ini dengan fitur-fitur tambahan yang sangat mudah dan nyaman digunakan, khususnya bagi development and operations (dev ops). Secara umum kontainer berbasis aplikasi ini selain memanfaatkan hardware sang induk, kernel induk, dia juga dapat memanfaatkan service-service lain dari kontainer-kontainer lain yang berjalan pada sistem yang saling berhubungan. Pada contoh gambar sebelumnya, Service C dan D dapat memanfaatkan MySQL (Service A) dan node.js (Service B) yang sudah tersedia pada induk. Hal ini memungkinkan kita untuk dapat mendeploy banyak service yang bergantung pada service-service pendukungnya secara efisien karena tidak perlu menciptakan lingkungan sistem operasi sendiri serta tidak ada duplikasi service.
Kelebihan dari teknologi ini antara lain:
1. Isolasi lingkungan terdapat pada tingkat aplikasi/ service, sehingga deployment akan lebih fleksibel per-service.
2. Secara teknis, kontainer berbasis aplikasi dapat berjalan pada native linux host, kontainer berbasis sistem operasi, maupun virtualisasi, sehingga keunggulan dari masing-masing induk tersebut dapat diperoleh dengan cara memilih jenis induk yang ingin digunakan.
3. Pemeliharaan sistem dapat lebih fokus per-service, misal Service C pada gambar sebelumnya terdapat pembaharuan minor dari versi 1.5.4 ke 1.5.5, namun hal tersebut cukup penting karena ada peningkatan keamanan service yang cukup krusial, kita tidak perlu melakukan merestart sistem secara menyeluruh, cukup upgrade Service C saja.
Selain menyediakan fitur berupa kontainer berbasis aplikasi, juga memiliki fitur dan keunggulan-keunggulan lain antara lain:
1. Docker secara resmi menyediakan registry (docker hub) yang berfungsi sebagai tempat penyimpanan images docker di awan (cloud based). Namun demikian terdapat juga beberapa 3rd party vendor yang menyediakan registry untuk menyimpan image docker ini antara lain quay.io, dan Google Container Registry.
2. Image Docker dapat dibangun melalui 2 cara, menggunakan Dockerfile yaitu suatu file dengan format penulisan yaml yang dipergunakan oleh docker engine untuk menciptakan suatu image berdasarkan baris perintah dan konfigurasi yang terdapat pada file dan melalui docker-commit selayaknya melakukan commit pada Git versioning system.
3. Terdapat sangat banyak alat bantu tambahan yang sangat membantu dan memudahkan kita dalam proses pengembangan maupun pengimplementasian suatu service ataupun aplikasi berbasis Docker, antara lain docker compose yang dapat mempermudah menjalankan beberapa docker container dengan bantuan file dengan format yaml, docker swarm yang dapat membantu manajemen docker pada multiple host, dan puluhan lainnya seperti pada link berikut https://github.com/veggiemonk/awesome-docker.
Hampir tidak mungkin suatu teknologi ramai diperbincangkan apabila tidak memberikan manfaat atau kemudahan dalam menjawab dan atau menyelesaikan permasalahan yang ada, begitu pula dengan teknologi kontainer ini. Berikut beberapa contoh kasus atau persoalan yang dapat diselesaikan atau dipermudah dengan memanfaatkan teknologi kontainer, khususnya Docker. Pastikan Docker sudah terinstal pada mesin yang kita pergunakan, buka tautan berikut untuk instruksi lebih lanjut. Untuk OS non Linux disarankan menggunakan docker native baru (bukan versi toolbox).
Mempermudah proses instalasi suatu service yang membutuhkan dependensi tertentu
Contoh paling sederhana adalah kemudahan dalam proses instalasi suatu service. Kita coba membahas tentang proses instalasi MySQL dengan PHPMyAdmin pada suatu mesin. Tanpa bantuan Docker, hal ini perlu melalui langkah-langkah yang cukup panjang, dan banyak celah atau kesempatan dimana human error sering terjadi. Belum lagi masalah yang disebabkan oleh perbedaan lingkungan dari suatu sistem (system environment). Antara lain instalasi MySQL itu sendiri, men-setup user admin, mensetup apache untuk PHPMyAdmin, mengkonfigurasi PHPMyAdmin, dan sebagainya. Mari kita bandingkan dengan memanfaatkan Docker. Asumsi kita sudah berada di lingkungan yang telah tersedia Docker, baik native menggunakan sistem operasi Linux, ataupun dengan docker-machine dengan virtual machine yang telah terpasang Docker. Cukup eksekusi baris perintah berikut:
$ docker run --name phpmyadmin-mysql -e MYSQL_ROOT_PASSWORD=rootpassword -d mysql:5.6$ docker run -d --link phpmyadmin-mysql:mysql -e MYSQL_USERNAME=root --name phpmyadmin -p 9000:80 corbinu/docker-phpmyadmin
Buka web browser dan tuju URL tempat docker engine berjalan, lalu buka http://localhost:9000 apabila menggunakan docker native, atau http://192.168.99.100:9000 apabila menggunakan docker-toolbox (alamat IP dapat dilihat dengan “docker-machine env”). PHPMyAdmin telah terpasang dengan username root dan password rootpassword.

Mempermudah instalasi beberapa service dengan dependensi dan konfigurasi yang berbeda
Asumsikan kita sedang melakukan deployment suatu produk dengan image yang berasal dari docker hub “hellowin/example-docker-sails” dengan ketentuan sebagai berikut:
1. Service example fase production pada port 8081.
2. Service example fase development pada port 8080.
3. Service mongo sebagai database tempat service example menyimpan data.
Contoh berikut memanfaatkan “docker-compose” untuk dapat menjalankan beberapa service dengan denpendensi yang dibutuhkan cukup dengan satu baris perintah dan file konfigurasi. Ikuti langkah berikut:
1. Buat satu directory dengan nama terserah.
2 Isi directory tersebut dengan file bernama “docker-compose.yml”.
3. Isi file “docker-compose.yml” dengan contoh di bawah.
4. Jalankan perintah “docker-compose up”, tunggu beberapa saat sampai tulisan pada console 5. berhenti.
5. Buka browser dan arahkan ke url “localhost:8080” untuk fase development dari project example atau “localhost:8081” untuk fase production.
Isi file “docker-compose.yml”:
dev:
image: hellowin/example-docker-sails:latest
ports:
- "8080:1337"
links:
- mongo:mongo
prod:
image: hellowin/example-docker-sails:latest
ports:
- "8081:1337"
links:
- mongo:mongo
environment:
- NODE_ENV=production
mongo:
image: mongo:3
ports:
- "27017"
Cara Kerja Kontainerisasi

Container menyediakan fleksibilitas secara keseluruhan dibanding kita menggunakan server secara fisik atau virtual machine. Container dapat langsung berjalan diatas Sistem Operasi (OS) tanpa menggunakan hypervisor. Seperti pada gambar diatas, container berjalan secara langsung diatas Sistem Operasi (OS). Container dapat membagi resource pada OS beserta fungsinya. Hal ini sangat menguntungkan secara performa dan penggunaan resource dikarenakan aplikasi yang digunakan hanya menggunakan resource berdasarkan apa yang dipakai saja.
Sumber:
https://blog.andi.dirgantara.co/teknologi-kontainer-pengantar-pengenalan-docker-706eafe03269
https://breakpoin.com/mengenal-teknologi-kontainerisasi-dengan-docker/


Komentar
Posting Komentar