Container

Secara harfiah Container (container, english) merupakan alat untuk mempermudah mengemas dan mendistribusikan suatu hal dari satu tempat ke tempat lain. Sedangkan dalam konteks lingkungan linux (linux environment), container dapat diartikan sebagai alat yang dapat dipergunakan untuk memberikan sistem yang terisolasi (isolated environment) pada level OS yang dijalankan pada satu induk linux kernel (host).

Container dibangun dalam 4 pondasi, namespace, cgroup, secom, dan selinux. Dan inisasi dibuatnya container ialah berdasarkan kernel Linux. Maka, apabila di Windows dapat memanfaatkan sistel WSL (Windows Subsystem Linux).

Container VS Virtual Machine/Hypervisor/dkk
Container pada dasarnya lahir berdasarkan melihat kebutuhan yang lain dalam hal infrastruktur virtual machine yaitu membuat sebuah sistem isolasi VM yang lebih baik salah satu yang mencolok adalah kebutuhan resource komputer yang lebih rendah dibanding infrastruktur VM. Seperti yang terlihat pada gambar yang infrastruktur-nya kurang lebih menjalankan sebuah virtual machine atau OS keseluruhan seperti di dalam komputer host seperti VMware Workstation atau Hypervisor seperti Esxi, Proxmox atau pada level kernel seperti Xen (Citrix based hypervisor) dan Xen Orchestra.

Maka, docker (dalam gambar dibawah tertulis docker, namun dalam konteks sebenarnya ialah container) merupakan sistem yang terisolasi (isolated environment) pada level OS yang dijalankan pada satu induk linux kernel yang memiliki arsitektur dan prinsip kerja tersendiri. Maka, dengan arsitektur-nya docker (container) dapat membuat lingkungan container diatas sebuah VM.

Low hardware footprint
Container menggunakan fitur internal OS untuk membuat lingkungan terisolasi (environment isolation) yang manfaatnya ialah tidak menyebabkan crash, dependency hell, atau tabrakan pada masing-masing library dalam setiap aplikasi di mana sumber daya dikelola menggunakan fasilitas OS seperti namespace dan ''[https://shekhargulati.com/2019/01/03/how-docker-uses-cgroups-to-set-resource-limits/#:~:text=How%20does%20Docker%20uses%20cgroup,bandwidth%2C%20network%20bandwidth%2C%20etc.&text=Docker%20uses%20cgroups%20to%20limit%20the%20system%20resources. cgroup]''. Intinya hal ini meminimalkan jumlah CPU dan overhead memori dibandingkan dengan hypervisor mesin virtual (VM).

Environment Isolation
Container bekerja di lingkungan tertutup di mana perubahan yang dibuat aplikasi dalam OS atau mesin host sama sekali tidak memengaruhi container. Karena library yang dibutuhkan oleh container berdiri sendiri, maka aplikasi dapat berjalan tanpa gangguan.

Quick deployment
Container diterapkan dengan cepat karena tidak perlu menginstal seluruh sistem operasi seperti pada physical host atau VM.

Multiple environment deployment
Dalam skenario traditional deployment yang menggunakan satu host, perbedaan lingkungan apa pun dapat merusak aplikasi. Namun, dengan menggunakan container, semua dependensi aplikasi dan setelan lingkungan diringkas dalam container image.

Reusability
Container yang sama dapat digunakan kembali tanpa perlu menyiapkan OS lengkap. Misalnya, container database yang menyediakan layanan database produksi dapat digunakan oleh setiap pengembang untuk membuat database pengembangan selama pengembangan aplikasi. Menggunakan container, tidak perlu lagi memelihara server database produksi dan pengembangan yang terpisah. Jadi container image tunggal digunakan untuk membuat instance dari layanan database.

Seringkali, aplikasi perangkat lunak dengan semua layanan yang bergantung (database, file system, dan lain-lain) dibuat untuk berjalan dalam satu wadah. Hal ini dapat menyebabkan masalah yang sama yang terkait dengan penerapan aplikasi tradisional ke mesin virtual atau host fisik. Dalam hal ini, penerapan multi-container mungkin lebih cocok.

Selain itu, container adalah pendekatan yang ideal saat menggunakan layanan mikro untuk pengembangan aplikasi. Setiap layanan dikemas dalam lingkungan container yang ringan dan andal yang dapat diterapkan ke lingkungan produksi atau pengembangan. Kumpulan layanan dalam container yang diperlukan oleh aplikasi dapat di-hosting di satu mesin, menghilangkan kebutuhan untuk mengelola mesin untuk setiap layanan.

Namun sebaliknya, banyak aplikasi yang tidak sesuai untuk lingkungan kontainer. Misalnya, aplikasi yang mengakses low-level hardware information, such as memory, file systems, dan devices mungkin tidak dapat diandalkan karena keterbatasan container itu sendiri.

Arsitektur Kontainer
Sebetulnya dari perspektif kernel Linux, container adalah proses dengan penuh kerterbatasan. Namun, alih-alih menjalankan satu file biner, container menjalankan image. Image adalah file-system bundle yang berisi semua dependensi yang diperlukan untuk menjalankan proses: files in the file system, installed packages, available resources, running processes, dan kernel modules.

Seperti file yang dapat dieksekusi adalah dasar untuk menjalankan proses, image adalah dasar untuk menjalankan kontainer. Kontainer yang sedang berjalan menggunakan tampilan gambar yang tidak dapat diubah, memungkinkan beberapa kontainer untuk menggunakan kembali gambar yang sama secara bersamaan. Karena gambar adalah file, gambar dapat dikelola dengan sistem versi, meningkatkan otomatisasi pada penampung dan penyediaan gambar.

Container image harus tersedia secara lokal agar runtime container dapat mengeksekusinya, tetapi image tersebut biasanya disimpan dan dipelihara dalam image repository (disebut juga registry). Image repository hanyalah layanan publik/privat di mana image dapat disimpan (push), dicari dan diambil (pull) seperti layanan git yang memungkinkan untuk dapat melakukan version control.

Dari sekian banyak image repository yang ada, masing-masing menawarkan fitur berbeda:


 * Red Hat Container Catalog
 * Docker Hub
 * Red Hat Quay
 * Google Container Registry (gcr.io)
 * Amazon Elastic Container Registry

Pranala Menarik

 * Containerized Applications
 * Podman
 * Docker