Cloud Computing : Mengenal Teknologi Containerization pada Cloud Computing

Konsep Container
Container adalah virtualisasi tingkat sistem operasi. Bisa juga disebut sebagai vitualisasi yang ringan. Karena hanya menyediakan kebutuhan minimum yang dibutuhkan sebuah aplikasi supaya bisa berjalan. Container merupakan virtual machine minimalis yang tidak berjalan pada hypervisor. Lalu apa saja yang ada di dalam container? Berikut ini yang ada dalam container :
1. Application
2. Binaries
3. Configuration File
4. Dependencies
5. Libraries
Bagaimana caranya bisa berjalan di environment yang berbeda? Containerization memungkinkan container untuk berjalan di environment yang berbeda dengan cara mengabstraksi sistem operasi dan infrastruktur fisik. Sebuah aplikasi yang dijadikan container berbagi kernel host operating system dengan container yang lain. Bagian sistem operasi yang dibagi itu bersifat “Read-only”. Biasanya, dalam satu container hanya terdapat satu buah service atau microservice.\

Kelebihan dan kekukangan Container
Kelebihan:

(1) Menjalankan container tidak menggunakan banyak sumber daya. Jadi seseorang dapat menambahkan lebih banyak beban kerja komputasi pada server yang sama.
(2) Dibandingkan dengan mesin virtual, ukuran rata-rata suatu container berada dalam kisaran puluhan atau ratusan MB, sedangkan mesin virtual mengkonsumsi beberapa gigabytes. Server dapat menampung lebih banyak kontainer.
(3) Kontainer cepat! Membuat container hanya membutuhkan beberapa detik. Waktu respons cepat ketika menyangkut aktivitas pengguna. Kontainer membantu mengurangi waktu yang dibutuhkan untuk pengembangan, pengujian, dan penyebaran.
(4) Menemukan kesalahan dan menyelesaikannya mudah dengan container. Mengapa? Karena tidak ada perbedaan antara menjalankan aplikasi secara lokal atau pada server uji.

Kekurangan:
(1) Keamanan adalah masalah dengan virtualisasi berbasis container dibandingkan dengan mesin virtual tradisional. Dalam container, Kernel dan komponen lain dari sistem operasi host dibagikan. Mereka memiliki akses root! Jadi container kurang terisolasi satu sama lain. Secara keseluruhan, itu tergantung pada jenis aplikasi dan modifikasi.
(2) Ada kurang fleksibilitas dalam sistem operasi. Jika Anda ingin menjalankan kontainer dengan sistem operasi yang berbeda, Anda harus memulai server baru.


Teknologi yang digunakan untuk Container
Container berbasis 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.
Container berbasis 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.
Kontainer berbasis aplikasi ini sangat cocok untuk desain arsitektur sistem dengan pendekatan microservice, karena masing-masing service memiliki lingkungan yang terisolasi namun tetap dapat berkomunikasi satu sama lain. Microservice sendiri merupakan suatu pendekatan desain arsitektur sistem informasi yang menspesifikkan dan memecah fungsi dari sistem yang besar menjadi sistem atau service yang kecil dan spesifik. Sehingga diharapkan lebih mudah dalam hal perawatan dan pengembangan dari suatu service, karena tidak adanya ikatan yang terlalu kuat antara service satu dengan lainnya, adapun hanya sebatas komunikasi API yang sudah disepakati. Salah satu referensi yang menarik tentang microservice ini dapat dibaca pada tautan berikut.
Beberapa vendor yang menawarkan teknologi container berbasis aplikasi antara lain Docker, Rkt (yang juga dikenal sebagai Rocket atau Rock-It), Drawbridge, dan LXD [referensi]. Namun diantaranya terdapat 2 yang paling popular yaitu Docker (34k+ GitHub star) dan Rkt (5k+ GitHub star). Rkt merupakan proyek yang dikembangkan oleh CoreOS dengan status masih dalam tahap pengembangan dan belum siap untuk fase produksi. Namun Rkt memiliki keunggulan yaitu dapat menjalankan image dari Docker, sehingga lebih fleksibel. Sedangkan maraknya pembahasan kontainer berbasis aplikasi yang dewasa ini diperbincangkan, utamanya karena Docker.

Studi kasus implementasi dari containerization
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.

Image for post
Cukup dengan 2 baris perintah, MySQL dan PHPMyAdmin terpasang pada mesin
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.
  1. Service example fase development pada port 8080.
  1. 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.
  1. Isi directory tersebut dengan file bernama “docker-compose.yml”.
  1. Isi file “docker-compose.yml” dengan contoh di bawah.
  1. Jalankan perintah “docker-compose up”, tunggu beberapa saat sampai tulisan pada console berhenti.
  1. 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"

Dari contoh tersebut setidaknya akan menghasilkan lingkungan sebagai berikut.

Image for post
Hasil docker-compose pada contoh
Apabila ada perubahan di masing-masing kontainer, misal kita hendak melakukan upgrade versi MongoDB atau versi example project, kita tidak perlu merestart keseluruhan sistem, melainkan cukup salah satu kontainer saja. Serta masing-masing service example tersebut dapat kita sambungkan pada penyimpanan yang terpisah, misalkan MongoDB1 dan MongoDB2 dengan versi yang berbeda. Jadi teknologi kontainer ini sangat mempermudah kita dalam membangun suatu produk atau layanan secara utuh dengan fleksibilitas yang tinggi. Contoh proyek ini dapat dilihat pada tautan https://github.com/hellowin/example-docker-sails.


Reference :

https://blog.andi.dirgantara.co/teknologi-kontainer-pengantar-pengenalan-docker-706eafe03269

0 komentar:

Posting Komentar