Cara Kerja Docker #

Docker sering dipersepsikan sebagai “alat untuk menjalankan aplikasi dalam container”. Namun, di balik kesederhanaan perintah seperti docker run, terdapat mekanisme kompleks di level Operating System (OS) yang membuat container menjadi ringan, cepat, dan terisolasi.

Banyak developer menggunakan Docker setiap hari tanpa benar-benar memahami bagaimana Docker bekerja di level OS, apa bedanya dengan virtual machine, dan mengapa Docker bisa begitu efisien.

Pada artikel ini, kita akan membedah:

  • Bagaimana Docker bekerja secara internal
  • Peran kernel Linux dalam container
  • Komponen utama seperti namespace, cgroups, dan filesystem
  • Alur lengkap dari docker run hingga aplikasi berjalan

Gambaran Arsitektur Docker di Level OS #

+--------------------------------------------------+
|                  User Space                      |
|                                                  |
|  docker CLI                                      |
|     |                                            |
|     v                                            |
|  Docker Daemon (dockerd)                         |
|     |                                            |
|     |  Container Runtime (containerd, runc)      |
|     |                                            |
+-----|--------------------------------------------+
      |
      v
+--------------------------------------------------+
|                Linux Kernel                      |
|                                                  |
|  - Namespaces (pid, net, mount, ipc, uts, user)  |
|  - Cgroups (CPU, Memory, I/O limits)             |
|  - Union File System (OverlayFS)                 |
|  - Seccomp / AppArmor / SELinux                  |
+--------------------------------------------------+
      |
      v
+--------------------------------------------------+
|                 Hardware                         |
|          CPU • Memory • Disk • Network           |
+--------------------------------------------------+

Diagram ini akan menjadi peta utama kita sepanjang artikel.

Apa Itu Container Sebenarnya? #

Secara teknis:

Container bukanlah virtual machine.

Container adalah sekumpulan proses biasa di OS, tetapi:

  • Terisolasi
  • Memiliki filesystem sendiri
  • Memiliki network sendiri
  • Dibatasi resource-nya

Semua ini dicapai tanpa membuat OS baru.

Perbedaan Fundamental dengan Virtual Machine #

Virtual MachineContainer
Menjalankan OS sendiriBerbagi kernel host
Heavy (GB)Lightweight (MB)
Boot lambatStart dalam hitungan ms
HypervisorKernel feature

Docker memanfaatkan fitur bawaan kernel Linux, bukan meniru hardware.


Peran Linux Kernel dalam Docker #

Docker sangat bergantung pada kernel Linux. Inilah alasan:

  • Docker berjalan native di Linux
  • Docker Desktop di macOS/Windows menggunakan VM Linux di balik layar

Ada 4 pilar utama di kernel Linux yang memungkinkan Docker:

  1. Namespaces
  2. Control Groups (cgroups)
  3. Union File System
  4. Security Modules

Mari kita bahas satu per satu.


Namespaces: Ilusi Isolasi #

Namespaces membuat sebuah proses merasa memiliki dunianya sendiri.

Jenis Namespace yang Digunakan Docker #

NamespaceFungsi
pidIsolasi process ID
netIsolasi network (IP, port, interface)
mountIsolasi filesystem mount
ipcIsolasi inter-process communication
utsIsolasi hostname
userIsolasi user & UID

Contoh Sederhana #

Proses di dalam container:

  • Melihat dirinya sebagai PID 1
  • Tidak melihat proses host
  • Memiliki hostname sendiri

Padahal, itu hanyalah proses biasa di host.

Inilah trik utama Docker.


Cgroups: Mengontrol Resource #

Tanpa cgroups, container bisa:

  • Menghabiskan seluruh CPU
  • Menguras memory host
  • Membuat sistem crash

Apa Itu Cgroups? #

Control Groups (cgroups) memungkinkan kernel:

  • Membatasi CPU
  • Membatasi memory
  • Membatasi disk I/O
  • Monitoring penggunaan resource

Contoh #

docker run \
  --memory=512m \
  --cpus=1.5 \
  nginx

Artinya:

  • Container tidak boleh memakai lebih dari 512MB RAM
  • Maksimal 1.5 core CPU

Tanpa cgroups, container hanyalah proses tanpa rem.


Filesystem: Kenapa Container Terasa Punya OS Sendiri? #

Ini bagian yang sering bikin bingung.

Image ≠ Container #

  • Image → template read-only
  • Container → image + writable layer

Docker menggunakan Union File System (umumnya OverlayFS).

OverlayFS Secara Konsep #

+---------------------+
| Writable Layer      |  <-- perubahan runtime
+---------------------+
| Image Layer 3       |
+---------------------+
| Image Layer 2       |
+---------------------+
| Image Layer 1       |
+---------------------+

Ketika container berjalan:

  • File asli tidak diubah
  • Semua perubahan masuk ke writable layer

Inilah alasan:

  • Image bisa di-share
  • Container cepat dibuat
  • Storage efisien

Networking: Container Mendapat IP dari Mana? #

Docker membuat virtual network menggunakan:

  • Linux bridge
  • veth pair
  • iptables

Alur Singkat #

[ Container ]
     |
   veth
     |
[ docker0 bridge ]
     |
[ Host Network ]

Setiap container:

  • Mendapat IP private
  • Bisa saling komunikasi
  • NAT ke network host

Semua ini dikelola otomatis oleh Docker daemon.


Security: Container Bukan Sandbox Sempurna #

Docker menambahkan lapisan keamanan tambahan:

  • Seccomp → filter system call
  • AppArmor / SELinux → mandatory access control
  • Capabilities → drop privilege root

Namun penting dipahami:

Container ≠ VM security boundary

Inilah alasan best practice:

  • Jangan jalankan container sebagai root
  • Gunakan minimal capability
  • Gunakan image terpercaya

Alur Lengkap: Apa yang Terjadi Saat docker run #

Mari kita rangkum step-by-step:

  1. Docker CLI mengirim perintah ke Docker Daemon
  2. Daemon memeriksa image (pull jika perlu)
  3. Docker membuat filesystem layer
  4. Namespace dibuat (pid, net, mount, dll)
  5. Cgroups diset
  6. Network virtual dibuat
  7. runc mengeksekusi process di namespace baru
  8. Process berjalan sebagai container

Semua ini terjadi dalam hitungan milidetik.


Kenapa Pemahaman Ini Penting? #

Dengan memahami cara kerja Docker di level OS, kamu akan:

  • Lebih paham soal security
  • Lebih tepat mengatur resource
  • Tidak salah menganggap container sebagai VM
  • Lebih percaya diri desain arsitektur production

Docker itu sederhana di permukaan, tapi sangat elegan di dalam.


Penutup #

Docker bukan sihir. Ia adalah hasil eksploitasi cerdas dari fitur kernel Linux yang sudah ada bertahun-tahun.

Ketika kamu menjalankan container, sebenarnya kamu sedang:

  • Menjalankan proses biasa
  • Dengan ilusi isolasi
  • Dikontrol ketat oleh kernel

Dan di situlah keindahan Docker ✨.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact