Apa Itu Application Containerization (Kontainerisasi Aplikasi)?

Application containerization adalah teknologi virtualisasi yang bekerja di level sistem operasi (OS). Teknologi ini dipakai untuk menjalankan dan mendistribusikan aplikasi dalam lingkungan yang terisolasi, tanpa harus menggunakan mesin virtual (VM). Tim IT bisa men-deploy banyak container dalam satu server, di mana masing-masing menjalankan aplikasi atau servisnya sendiri. Container ini berbagi kernel OS dan sumber daya fisik yang sama. Container bisa dijalankan di server fisik langsung, di VM, atau di platform cloud. Sebagian besar container berjalan di server Linux, tapi beberapa juga bisa jalan di Windows atau macOS.

Kelebihan dan Kekurangan Application Containerization

Banyak organisasi, dari kecil sampai besar, makin beralih ke containerization karena berbagai keuntungan dibanding metode tradisional seperti install langsung di server atau via VM. Beberapa keunggulan yang sering disebut, antara lain:

  • Efisiensi. Karena container berbagi kernel dan resource dari host, mereka jadi sangat ringan. Ini bikin mereka butuh lebih sedikit CPU, memori, dan storage dibanding metode deployment tradisional. Artinya, infrastruktur yang sama bisa dipakai untuk menjalankan lebih banyak container.
  • Portabilitas. Selama OS-nya sama, container bisa dijalankan di sistem atau platform cloud mana pun tanpa perlu ubah kode. Nggak perlu pusing mikirin environment variables atau library dependency seperti di VM.
  • Agilitas. Karena ringan dan mudah diduplikasi, container cocok banget buat otomasi dan metode DevOps. Sepanjang siklus hidup aplikasi, dari build sampai production, isi dari container (file system, binary, dll) tetap sama. Semua hasil development dikemas dalam satu image container. Version control bisa langsung dilakukan di level image, bukan di level sistem lagi.
  • Skalabilitas. Begitu tim dev punya image-nya, mereka bisa spin-up container dalam jumlah banyak dengan cepat menggunakan tools otomasi dan orkestrasi. Jadi, deployment bisa fleksibel sesuai beban kerja sekarang, dan gampang di-scale kalau beban naik.
  • Isolasi. Container berjalan secara terisolasi. Kalau satu container error, nggak akan ngeganggu container lain atau host system. Bahkan dalam arsitektur microservices yang satu aplikasi terbagi dalam beberapa container, error di satu container nggak bikin keseluruhan aplikasi down. Dev bisa fokus fixing satu titik aja.
  • Kecepatan. Container sangat cepat untuk dibuat dan dijalankan. Nggak perlu booting OS baru karena mereka pakai kernel host, dan semua dependency udah ada di dalamnya. Jadi bisa langsung deploy kapan saja, di mana saja, bahkan otomatis sekalipun.

Sampai batas tertentu, container juga bantu ningkatin keamanan karena tiap aplikasi berjalan lebih terisolasi daripada di server fisik. Container juga bisa diatur pakai policy terkait privilege-nya. Tapi, tetap aja, keamanan masih jadi salah satu perhatian utama.

Karena container nggak benar-benar terpisah dari OS host, mereka masih bisa kena serangan yang menargetkan sistem dasarnya. Kalau container sampai kebobolan, bisa jadi host-nya juga ikut kena. Tools keamanan biasanya lebih efektif buat hypervisor atau OS daripada buat container itu sendiri.

Tantangan lain: containerization masih terbilang teknologi baru dan terus berkembang. Beberapa tim IT atau dev masih belum punya skill atau pengalaman cukup buat pakai container secara efisien dan aman.

Masalah ini makin kompleks kalau harus pakai container di banyak environment atau OS host yang berbeda. Bisa aja mereka butuh layer tambahan buat abstraksi.

Misalnya, kalau mau jalanin container Linux di mesin Windows, biasanya mereka setup VM Linux dulu. Layer tambahan ini bikin proses makin kompleks, dan bisa ngurangi sebagian keunggulan dari containerization itu sendiri.

Bagaimana Cara Kerja Application Containerization?

Arsitektur dari lingkungan containerized melibatkan beberapa komponen yang bekerja bareng untuk membuat, menjalankan, stop, dan menghapus container. Gambar berikut nunjukin overview dari arsitektur dasarnya—container ada di paling atas, dan infrastruktur jadi fondasinya.

Gambar 1. Container mengemas kode aplikasi tapi tetap berbagi kernel OS yang sama.

Komponen utama dari lingkungan containerized biasanya terdiri dari:

  • Infrastruktur. Lapisan hardware (biasanya hardware umum) untuk menjalankan OS host yang menopang semuanya.
  • Host OS. Sistem operasi yang berjalan di atas hardware. OS ini nyediain kernel yang dibutuhkan container untuk jalan. Biasanya Linux.
  • Container engine. Ini software yang berjalan di atas OS dan nyediain runtime buat container. Engine ini juga ngatur lifecycle container dan nyediain resource-nya. Docker adalah salah satu engine yang paling populer.
  • Container. Instance dari image container. Di dalamnya ada semua yang dibutuhin buat jalanin aplikasi—dari binaries, library, environment variable, sampai config file.

Container dibuat dari container image saat runtime. Image ini ibarat template lengkap berisi semua kode dan dependency aplikasi. Biasanya image disimpan di repository, lalu ditarik saat dibutuhkan.

Container modern biasanya mengikuti standar dari Open Container Initiative. Untuk update, developer cukup ubah image-nya lalu deploy ulang. Container engine akan buat container baru dari image tersebut.

Lingkungan container modern umumnya pakai orchestrator seperti Kubernetes untuk ngatur deployment. Platform orkestrasi ini bantu scaling dan management container secara otomatis, terutama di deployment skala besar.

Container sering dipakai untuk aplikasi terdistribusi dan microservices. Komunikasi antar container dilakukan via API. Orchestrator bisa auto-scale container sesuai kebutuhan trafik aplikasi.

Perbedaan Container dan Virtual Machine

Container sering dibandingkan dengan VM. Dua-duanya memang bentuk virtualisasi yang memberikan lingkungan terisolasi untuk menjalankan aplikasi dan memaksimalkan resource fisik.

Bedanya, VM itu berat karena harus jalanin guest OS sendiri, jadi ibarat komputer fisik virtual. Misal, satu server bisa punya VM Linux dan VM Windows sekaligus. Tapi ini bikin overhead-nya besar.

VM dijalankan di atas platform virtualisasi yang dikelola oleh hypervisor. Hypervisor ini memisahkan hardware dari OS guest. Berbeda dari container yang pakai kernel host, VM benar-benar terpisah sehingga lebih aman, tapi lebih boros resource dan lisensi OS.

Container butuh resource lebih sedikit karena mereka berbagi OS dan tidak menjalankan OS masing-masing. Tapi sisi negatifnya, container lebih rentan secara keamanan.

Karena itu, banyak tim IT jalanin container di dalam VM, untuk dapat benefit dari keduanya—efisiensi container dan isolasi ekstra dari VM.

Apa Itu System Container?

Selain application container, ada juga system container. Bedanya, system container berperilaku seperti VM tapi tanpa virtualisasi hardware. System container punya OS sendiri dan bisa jalanin beberapa application container di dalamnya.

System container biasanya long-running (nggak sebentar kayak application container) dan dikelola lewat configuration management tools, bukan rebuild image setiap kali ada update. Salah satu proyek system container yang terkenal adalah LXD dari Canonical, pengembang Ubuntu. Alternatif lainnya adalah OpenVZ.

Jenis Teknologi Containerization

Docker masih jadi teknologi container yang paling banyak dipakai, terutama via Docker Engine dan runtime RunC. Tapi sekarang sudah ada alternatif lain seperti Podman, Containerd, dan Linux LCD. Untuk orkestrasi, tools seperti Kubernetes, Docker Swarm, atau Red Hat OpenShift sering digunakan.

Beberapa solusi container dari penyedia cloud besar antara lain:

  • Apache Mesos. Platform open source untuk ngatur workload dalam lingkungan terdistribusi, termasuk support native untuk container Docker dan AppC.
  • Google Kubernetes Engine. Layanan Kubernetes yang dikelola Google untuk menjalankan container. Support build-deploy yang cepat dan efisien.
  • Amazon Elastic Container Registry (ECR). Layanan AWS untuk menyimpan, mengelola, dan men-deploy image Docker secara scalable dan high-availability.
  • Azure Kubernetes Service (AKS). Layanan Kubernetes dari Microsoft Azure. Developer bisa deploy dan scale container Docker dalam cluster dengan mudah.

Memilih Platform untuk Containerization

Saat memilih platform untuk containerization, tim developer perlu mempertimbangkan beberapa hal penting berikut ini:

  • Arsitektur aplikasi. Fokus utamanya ada pada keputusan arsitektur aplikasi—apakah aplikasinya pakai model monolitik atau microservices, dan apakah aplikasinya bersifat stateless atau stateful.
  • Alur kerja dan kolaborasi. Pertimbangkan perubahan alur kerja dan pastikan platform-nya mendukung kolaborasi yang lancar antar stakeholder.
  • DevOps. Cek juga apakah platform tersebut memungkinkan penggunaan interface self-service buat deploy aplikasi via pipeline DevOps.
  • Paket aplikasi. Lihat juga format dan tools yang digunakan untuk mengemas kode aplikasi, dependency, container, dan semua dependensinya.
  • Monitoring dan logging. Pastikan fitur monitoring dan logging yang tersedia sudah sesuai dengan kebutuhan dan bisa menyatu dengan workflow pengembangan saat ini.

Men-deploy aplikasi dalam bentuk container juga bisa berdampak besar ke tim IT, terutama yang terlibat dalam inisiatif DevOps. Karena itu, ada beberapa hal yang wajib dipikirkan sebelum mulai deploy containerized app:

  • Kebutuhan arsitektur aplikasi. Pastikan platform-nya mendukung kebutuhan arsitektur aplikasi, termasuk kebutuhan storage khususnya untuk aplikasi yang stateful.
  • Migrasi aplikasi lama. Platform dan tool di sekitarnya harus bisa support migrasi aplikasi lama yang masih harus dijalankan.
  • Strategi update dan rollback. Bareng developer, tentukan strategi update dan rollback yang sesuai dengan SLA yang sudah ditetapkan.
  • Monitoring dan logging. Rencanakan juga infrastruktur monitoring dan logging yang tepat untuk ngumpulin metrik-metrik penting dari sistem dan aplikasi.
  • Storage dan jaringan. Pastikan cluster storage, network identity, dan sistem otomasi yang dibutuhkan untuk aplikasi stateful sudah siap.

Sejarah Application Containerization

Teknologi container pertama kali dikenalkan tahun 1979 lewat sistem Unix versi 7 dan sistem Chroot. Chroot jadi awal dari konsep isolasi proses ala container dengan membatasi akses file aplikasi hanya ke direktori tertentu—yakni root directory dan isinya. Keuntungan utama dari chroot adalah peningkatan keamanan, karena lingkungan yang terisolasi nggak bisa ganggu sistem lain meskipun ada celah keamanan di dalamnya.

Pada Maret 2000, FreeBSD ngenalin perintah jail di OS-nya. Jail mirip kayak chroot, tapi lebih lengkap karena punya fitur tambahan untuk sandboxing—mulai dari isolasi file system, jaringan, sampai user. Jail juga bisa dikasih IP address sendiri dan konfigurasi software-nya masing-masing. Tapi tetap, aplikasi dalam jail punya kemampuan yang terbatas.

Tahun 2004, Solaris merilis Solaris Containers yang lebih lengkap dengan nama Solaris Zones. Zones memungkinkan aplikasi punya ruang sendiri untuk user, proses, file system, dan akses ke hardware sistem—tapi cuma bisa lihat lingkungan zone-nya sendiri.

Tahun 2006, Google ngenalin “process containers” buat membatasi penggunaan resource oleh suatu proses. Tapi karena istilah “container” dianggap membingungkan, Google ganti namanya jadi “control groups” (cgroups) pada 2007.

Setahun kemudian (2008), cgroups di-merge ke dalam kernel Linux versi 2.6.24. Ini jadi cikal bakal proyek LXC (Linux Containers), yang memungkinkan multiple container berjalan secara terisolasi dalam satu kernel Linux yang sama.

Tahun 2013, Google lagi-lagi mengubah permainan dengan open source project bernama “Let Me Contain That For You” (LMCTFY). Dengan LMCTFY, developer bisa bikin aplikasi yang “container-aware”, alias aplikasi yang bisa buat dan kelola container-nya sendiri. Namun pada 2015, Google berhenti ngembangin LMCTFY dan menyumbangkan konsep dasarnya ke proyek Docker lewat Libcontainer.

Docker sendiri muncul sebagai proyek open source tahun 2013. Dengan Docker, container bisa dikemas sehingga mudah dipindahkan antar environment. Awalnya Docker pakai LXC, tapi tahun 2014 beralih ke Libcontainer. Ini memungkinkan Docker bekerja lebih optimal dengan fitur-fitur Linux seperti namespaces, cgroups, AppArmor, interface jaringan, firewall, dan lainnya.

Di tahun 2017, perusahaan-perusahaan seperti Pivotal, Rancher, AWS, dan bahkan Docker sendiri mulai mendukung Kubernetes sebagai tools open source untuk scheduling dan orkestrasi container.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *