Engine & Daemon #

Docker sering dipahami sebagai tool tunggal untuk menjalankan container. Padahal, di balik perintah sederhana seperti docker run atau docker build, terdapat arsitektur internal yang cukup kompleks. Dua komponen paling penting di dalamnya adalah Docker Daemon dan Docker Engine.

Memahami perbedaan dan peran daemon serta engine sangat krusial, terutama jika kamu:

  • Mengelola server Docker di production
  • Menghadapi isu performa atau keamanan
  • Menggunakan Docker secara remote (CI/CD, Docker context, atau API)

Artikel ini akan membahas secara mendalam apa itu Docker Daemon, apa itu Docker Engine, bagaimana keduanya bekerja, serta best practice penggunaannya.

Gambaran Arsitektur #

Secara konseptual, Docker menggunakan arsitektur client–server:

+-------------+        REST API        +-------------------+
| Docker CLI  |  <----------------->   |   Docker Daemon   |
+-------------+                        |  (dockerd)        |
                                       +---------+---------+
                                                 |
                                                 v
                                    +------------------------+
                                    | Container Runtime      |
                                    | (containerd, runc)     |
                                    +------------------------+
  • Docker CLI: antarmuka yang kita gunakan (docker run, docker ps, dll)
  • Docker Daemon (dockerd): proses utama yang mengatur container
  • Docker Engine: paket lengkap yang mencakup daemon, API, dan CLI

Docker CLI ke Daemon menggunakan REST API via Unix Socket.


Apa Itu Docker Daemon? #

Definisi #

Docker Daemon adalah proses background yang berjalan terus-menerus di sistem operasi host dan bertanggung jawab penuh atas:

  • Membuat dan menjalankan container
  • Mengelola image
  • Mengatur network dan volume
  • Berkomunikasi dengan container runtime

Docker Daemon dijalankan sebagai proses bernama:

dockerd

Peran Utama Docker Daemon #

Docker Daemon bertindak sebagai otak Docker. Semua perintah yang kamu jalankan melalui Docker CLI pada akhirnya akan dieksekusi oleh daemon.

Tugas utamanya meliputi:

  1. Container Lifecycle Management

    • create
    • start
    • stop
    • restart
    • remove
  2. Image Management

    • pull image dari registry
    • build image dari Dockerfile
    • menyimpan image di local cache
  3. Network Management

    • bridge
    • host
    • overlay
    • macvlan
  4. Volume Management

    • create volume
    • mount volume ke container
  5. API Provider

    • menyediakan REST API yang bisa diakses oleh Docker CLI maupun tool lain

Docker Daemon dan REST API #

Docker Daemon menyediakan REST API yang secara default diakses melalui:

  • Unix socket:

    /var/run/docker.sock
    
  • TCP socket (jika diaktifkan)

Docker CLI tidak menjalankan container secara langsung, melainkan:

  1. Mengirim request ke Docker Daemon
  2. Docker Daemon memproses request
  3. Hasil dikembalikan ke CLI

Inilah alasan kenapa Docker bisa dikontrol secara remote.

Docker Daemon di Sistem Operasi #

  • Linux: berjalan sebagai service systemd

    systemctl status docker
    
  • macOS & Windows:

    • Docker Daemon berjalan di dalam VM (Linux VM)
    • Di-manage oleh Docker Desktop

Ini penting karena container selalu berjalan di kernel Linux, bahkan di Mac dan Windows.


Apa Itu Docker Engine? #

Definisi #

Docker Engine adalah platform lengkap untuk membangun dan menjalankan container. Docker Engine bukan hanya daemon, melainkan satu paket yang terdiri dari beberapa komponen utama.

Komponen Docker Engine #

Docker Engine terdiri dari:

  1. Docker Daemon (dockerd)

  2. Docker REST API

  3. Docker CLI

  4. Container Runtime

    • containerd
    • runc

Secara sederhana:

Docker Engine = semua yang kamu butuhkan untuk menjalankan Docker

Peran Docker Engine #

Docker Engine menyediakan:

  • Abstraksi container
  • Konsistensi environment
  • Standar runtime berbasis OCI

Dengan Docker Engine, developer tidak perlu:

  • Berurusan langsung dengan cgroups
  • Mengatur namespace Linux secara manual
  • Mengelola dependency OS

Hubungan Docker Engine, Daemon, containerd, dan runc #

Ini bagian yang sering membingungkan, jadi kita luruskan.

Lapisan Eksekusi Container #

Docker CLI
   ↓
Docker Daemon (dockerd)
   ↓
containerd
   ↓
runc
   ↓
Linux Kernel (cgroups, namespaces)

Penjelasan Singkat #

  • dockerd

    • Mengatur high-level logic Docker
  • containerd

    • Mengelola lifecycle container secara low-level
    • Image pull, snapshot, execution
  • runc

    • Menjalankan container sesuai spesifikasi OCI
    • Berinteraksi langsung dengan kernel Linux

Docker sejak versi modern tidak lagi menjalankan container langsung, melainkan mendelegasikannya ke containerd.


Docker Daemon vs Docker Engine #

AspekDocker DaemonDocker Engine
BentukProsesPlatform / Paket
NamadockerdDocker Engine
FungsiMengatur containerMenyediakan seluruh ekosistem Docker
Termasuk CLI
Termasuk Runtime

Intinya:

  • Docker Daemon adalah bagian dari Docker Engine
  • Docker Engine adalah keseluruhan sistem Docker

Mode Komunikasi Docker Daemon #

Local Mode #

Docker CLI dan daemon berada di mesin yang sama:

docker ps

Remote Mode #

Docker CLI mengontrol daemon di server lain:

docker -H tcp://server:2375 ps

Atau menggunakan Docker context:

docker context use production

Ini sangat umum di:

  • CI/CD
  • Remote build
  • Server production

Aspek Keamanan Docker Daemon #

⚠️ Docker Daemon adalah komponen yang sangat sensitif.

Beberapa fakta penting:

  • Akses ke docker.sock ≈ akses root
  • Container bisa mount filesystem host
  • Bisa menjalankan container privileged

Best Practice Keamanan #

  1. Jangan expose Docker Daemon tanpa TLS
  2. Batasi akses ke /var/run/docker.sock
  3. Gunakan user group docker dengan hati-hati
  4. Gunakan rootless Docker jika memungkinkan
  5. Isolasi environment production

Rootless Docker dan Dampaknya ke Daemon #

Rootless Docker menjalankan Docker Daemon tanpa hak akses root.

Kelebihan:

  • Lebih aman
  • Mengurangi risiko privilege escalation

Kekurangan:

  • Beberapa fitur terbatas (port <1024, overlay tertentu)

Cocok untuk:

  • Development
  • Shared environment

Kapan Perlu Memahami Daemon dan Engine Secara Mendalam? #

Pemahaman ini sangat penting jika kamu:

  • Debug container yang tidak mau start
  • Mengalami issue resource (CPU / memory)
  • Mengelola Docker di server besar
  • Menggunakan Kubernetes (karena konsepnya mirip)

Penutup #

  • Docker Daemon (dockerd) adalah proses inti yang mengatur semua aktivitas Docker
  • Docker Engine adalah platform lengkap yang mencakup daemon, API, CLI, dan runtime
  • Docker menggunakan arsitektur client–server
  • Keamanan Docker sangat bergantung pada bagaimana daemon dikelola

Dengan memahami daemon dan engine, kamu tidak hanya menggunakan Docker, tapi benar-benar menguasainya.

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