Pendahuluan

Bagian 1 mengenai Docker –> Docker - Part 1

Oke, sekarang dengan Docker, kita akan bisa melakukan development dan deployment dengan lebih mudah dan mempunyai tempate/desain awal yang bisa kita bungkus jadi sebuah paketan unit.

Tidak perlu membuat sebuah VM terpisah yang memakan banyak CPU, Memori, ataupun Hardisk yang besar.

Tapi sebenarnya bagaimana sih Docker itu bekerja, dan bagaimana mungkin banyak aplikasi berbeda berjalan di Operating System yang sama, tetapi masing-masing terisolasi ?


Cara kerja Container

Docker sebenarnya jalan di Sistem Operasi Linux, sebagai sebuah container.

Dari dulu fitur untuk membuat fitur container ini sudah dikembangkan di Linux, bukan hanya Docker yang memanfaatkannya.

Bagaimana membuat proses yang terisolasi, pembatasan sumberdaya seperti memori, cpu, hardisk, pembatasan security, dll sudah dibahas dan dilengkapi fiturnya di Linux Kernel sejak lama.

Bagaimana membuat Virtualisasi diatas mesin komputer Linux tanpa harus mengalokasikan secara fisik Hardware nya.

Kemudian muncullah fitur-fitur di Kernel Linux yang mengadopsi hal tersebut, seperti namespaces, cgroups, overlays, dll.

Banyak library/driver yang mencoba membuat wrapper diatas fitur fitur linux diatas, seperti LXC, LXD, OpenVZ, dll.

Docker juga menggunakan fitur-fitur tersebut untuk bisa membuat container di Linux.

Docker membungkusnya lagi dengan cara yang mudah, sehingga menjadi populer dan mudah digunakan sampai sekarang.

Secara umum ada beberapa fitur di Linux Kernel yang memungkinkan container bisa dibuat, yaitu :

  • namespaces, yaitu fitur yang memungkinkan isolasi proses di Linux. misalnya :

    • mnt namespaces, memungkinkan untuk isolasi filesystem.
    • pid namespaces, memungkinkan untuk isolasi proses yang hanya bisa dilihat oleh proses itu sendiri dan child prosesnya.
    • network namespaces, membuat jaringan tersendiri dan terisolasi
    • dll
  • cgroups (control groups) yaitu fitur untuk membatasi penggunaan CPU, Memori, IO, jaringan dari proses-proses yang jalan di Linux. sehingga tidak ada container yang menghabiskan sumber daya host secara sembarangan.

  • overlays file system (union file system), yaitu fitur untuk membuat filesystem dengan cara menumpuk beberapa directories/layer/mount points.

  • SELinux (Security Enhanced Linux), terkait dengan security proses di Linux.

  • apparmor

  • netlink

  • netfilter

  • dll


Bagaimana dengan Docker ?

Iya, tentunya docker menggunakan fitur-fitur Linux kernel yang sudah ada tersebut.

Pada awalnya Docker menggunakan LXC (Linux Container) driver sebagai tools pembungkus diatas fitur-fitur Linux kernel tersebut.

Bisa dilihat dari blognya founder Docker, Solomon Hykes di sini

alt text

Gambarnya diambil dari blognya Docker di sini

Jadi pada awalnya Docker mempunyai ketergantungan terhadap LXC driver sebagai tools/driver diatas fitur-fitur Linux Kernel tersebut.

Akan tetapi semenjak versi 0.9, Docker membuat library/driver sendiri yang langsung mengakses fitur-fitur Linux Kernel tersebut.

Driver tersebut dinamakan libcontainer.

Dengan libcontainer ini, Docker bisa melakukan manipulasi namespace, control groups, capabilities, apparmor, network interface, dan firewall rules dengan cara sendiri dan tidak tergantung dari release atau distribusi LXC.

Referensi :

https://www.docker.com/blog/docker-0-9-introducing-execution-drivers-and-libcontainer/ https://stackoverflow.com/questions/46450341/chroot-vs-docker https://www.adaltas.com/en/2021/06/03/linux-overlay-filesystem-docker/