Host #
Ketika membahas Docker, banyak orang langsung fokus pada image dan container. Padahal, ada satu komponen yang sering luput dibahas namun sangat krusial: Docker Host. Tanpa host, container tidak akan pernah bisa berjalan.
Docker Host adalah lingkungan tempat Docker Engine berjalan dan di sanalah seluruh container hidup, berbagi resource, dan berinteraksi dengan sistem operasi. Memahami konsep host ini penting agar kita benar-benar paham bagaimana Docker bekerja di level sistem operasi, bukan sekadar di level perintah docker run.
Diagram Konsep Docker Host #
Berikut adalah gambaran sederhana untuk membantu memahami posisi Docker Host dalam arsitektur Docker:
+--------------------------------------------------+
| Docker Host |
| |
| +---------------- Docker Engine --------------+ |
| | | |
| | +------------+ +------------+ | |
| | | Container A| | Container B| ... | |
| | +------------+ +------------+ | |
| | | |
| +---------------------------------------------+ |
| |
| OS Kernel (Linux Kernel / Hypervisor Layer) |
+--------------------------------------------------+
| Hardware (CPU, RAM, Disk) |
+--------------------------------------------------+
Diagram ini menunjukkan bahwa:
- Container berjalan di atas Docker Engine
- Docker Engine berjalan di dalam Docker Host
- Semua container berbagi kernel OS milik host
Apa Itu Docker Host? #
Docker Host adalah mesin (fisik atau virtual) yang:
- Menjalankan Docker Engine
- Menyediakan kernel OS, CPU, memori, storage, dan network
- Menjadi tempat container dibuat, dijalankan, dihentikan, dan dihapus
Secara sederhana:
Docker Host = OS + Docker Engine + Resource Hardware
Docker Host bisa berupa:
- Laptop developer
- VM di cloud (EC2, GCE, Azure VM)
- Node di Kubernetes
- Server bare metal di data center
Komponen Utama di Dalam Docker Host #
1. Sistem Operasi (Host OS) #
Docker berjalan langsung di atas kernel OS milik host.
- Di Linux: Docker menggunakan kernel Linux secara native
- Di macOS & Windows: Docker menggunakan VM Linux (karena container butuh Linux kernel)
Inilah alasan mengapa:
- Container lebih ringan dibanding VM
- Startup container sangat cepat
2. Docker Engine #
Docker Engine adalah inti dari Docker Host, terdiri dari:
- Docker Daemon (
dockerd) → mengelola container, image, network, volume - REST API → jembatan antara CLI dan daemon
- Docker CLI → antarmuka untuk user
Semua perintah seperti docker run, docker build, dan docker ps dieksekusi oleh Docker Engine di dalam host.
3. Resource Host (CPU, RAM, Disk, Network) #
Semua container di dalam satu host:
- Berbagi CPU dan RAM yang sama
- Menggunakan storage host (via volume atau filesystem layer)
- Menggunakan network host (bridge, overlay, host network)
Docker tidak menciptakan resource baru, melainkan mengisolasi dan membatasi resource host.
Bagaimana Container Menggunakan Host? #
Container bukan VM. Container:
- Tidak memiliki kernel sendiri
- Tidak boot OS
- Tidak mengemulasi hardware
Sebaliknya, container:
- Menggunakan Linux Namespace untuk isolasi
- Menggunakan cgroups untuk pembatasan resource
- Berjalan sebagai proses biasa di host
Itulah mengapa:
- Container terlihat seperti aplikasi biasa dari sisi host
- Namun tetap terisolasi satu sama lain
Docker Host vs Virtual Machine Host #
| Aspek | Docker Host | VM Host |
|---|---|---|
| Kernel OS | Shared (host) | Setiap VM punya kernel |
| Overhead | Sangat kecil | Besar |
| Startup | Detik | Menit |
| Isolasi | Process-level | OS-level |
Docker Host memungkinkan kepadatan aplikasi yang jauh lebih tinggi dibanding VM.
Tipe-Tipe Docker Host #
1. Local Docker Host #
Biasanya digunakan untuk:
- Development
- Testing
Contoh:
- Docker Desktop di macOS / Windows
- Docker Engine di Linux laptop
2. Cloud Docker Host #
Digunakan untuk:
- Production
- Staging
Contoh:
- EC2 + Docker
- GCE VM + Docker
- VM di Azure
3. Container Host di Kubernetes #
Dalam Kubernetes:
- Setiap node adalah Docker Host (atau container runtime host)
- Docker Engine bisa digantikan oleh containerd atau CRI-O
Konsep host tetap sama: node menyediakan kernel dan resource.
Tantangan dan Risiko di Docker Host #
Beberapa hal penting yang perlu diperhatikan:
1. Resource Contention #
Jika tidak dibatasi:
- Satu container bisa menghabiskan CPU/RAM
- Container lain ikut terdampak
Solusi:
- Gunakan limit CPU & memory
2. Single Point of Failure #
Jika satu host mati:
- Semua container di dalamnya ikut mati
Solusi:
- Gunakan multiple host
- Orchestrator seperti Kubernetes
3. Security #
Karena kernel di-share:
- Kerentanan kernel bisa berdampak luas
Solusi:
- Update OS rutin
- Gunakan user namespace
- Jalankan container non-root
Best Practice #
Beberapa praktik terbaik:
- Gunakan OS minimal (Ubuntu Server, Alpine, Bottlerocket)
- Jangan install aplikasi lain di host
- Pisahkan host untuk production dan non-production
- Batasi resource container
- Monitor host (CPU, memory, disk, inode)
Penutup #
Docker Host adalah fondasi utama dari seluruh ekosistem Docker. Container yang terlihat ringan dan fleksibel sebenarnya sangat bergantung pada host tempat mereka berjalan.
Dengan memahami Docker Host, kita tidak hanya tahu cara menjalankan container, tetapi juga:
- Mengerti bagaimana Docker bekerja di level OS
- Bisa mendesain arsitektur yang lebih stabil
- Lebih siap menghadapi isu performa dan keamanan
Docker bukan sekadar tool, tapi cara baru memanfaatkan host secara efisien dan modern.