Container #
Container adalah inti dari Docker. Saat kita berbicara tentang Docker, sebenarnya yang kita jalankan, hentikan, scale, dan deploy sehari-hari adalah container, bukan Docker itu sendiri.
Untuk memudahkan pemahaman sejak awal, berikut gambaran sederhana posisi container di dalam ekosistem Docker:
+---------------------------------------------------+
| Host OS (Linux) |
| |
| +---------------- Docker Engine ---------------+ |
| | | |
| | +----------- Container A -----------+ | |
| | | App / Process (PID 1) | | |
| | | Libraries & Runtime | | |
| | | Writable Layer | | |
| | +-----------------------------------+ | |
| | | |
| | +----------- Container B -----------+ | |
| | | App / Process (PID 1) | | |
| | | Libraries & Runtime | | |
| | | Writable Layer | | |
| | +-----------------------------------+ | |
| | | |
| | (Containers share Host Kernel) | |
| +----------------------------------------------+ |
| |
+---------------------------------------------------+
Diagram di atas menunjukkan bahwa:
- Semua container berjalan di atas satu kernel host
- Setiap container memiliki isolasi process, filesystem, dan network
- Container jauh lebih ringan dibanding virtual machine
Banyak developer pemula memahami Docker sebatas “alat untuk build image”, padahal image hanyalah blueprint. Container adalah wujud hidup (runtime) dari image tersebut.
Artikel ini akan membahas container Docker secara mendetail, runtut, dan praktis, mulai dari definisi, konsep internal, lifecycle, sampai best practice penggunaannya di dunia nyata.
Apa Itu Container di Docker? #
Container adalah instance runtime dari sebuah Docker image.
Jika dianalogikan:
- Dockerfile → resep masakan
- Docker image → masakan siap saji
- Docker container → masakan yang sedang dimakan
Secara teknis, container adalah:
- Proses yang berjalan di host OS
- Terisolasi menggunakan Linux namespaces & cgroups
- Memiliki filesystem, network, dan process space sendiri
Container bukan virtual machine. Ia jauh lebih ringan karena:
- Tidak membawa kernel sendiri
- Menggunakan kernel host
Perbedaan Image vs Container #
| Aspek | Image | Container |
|---|---|---|
| Sifat | Immutable | Mutable (runtime) |
| Fungsi | Template | Runtime execution |
| Bisa dijalankan | Tidak | Ya |
| Bisa diubah | Tidak | Ya (selama hidup) |
Satu image bisa menghasilkan banyak container.
Bagaimana Container Bekerja di Balik Layar? #
Saat menjalankan:
docker run nginx
Docker melakukan langkah berikut:
- Mencari image
nginxsecara lokal - Jika tidak ada, pull dari registry
- Membuat writable layer baru di atas image
- Mengatur namespace (PID, NET, MNT, UTS, IPC)
- Mengatur cgroups (CPU, memory, IO limit)
- Menjalankan process utama (PID 1)
Container hidup selama process utama masih berjalan.
Komponen Isolasi Container #
Namespace #
Namespace memberikan ilusi bahwa container memiliki sistem sendiri.
| Namespace | Fungsi |
|---|---|
| PID | Isolasi process |
| NET | Network sendiri |
| MNT | Filesystem |
| UTS | Hostname |
| IPC | Inter-process communication |
cgroups #
Control Groups membatasi resource:
- CPU
- Memory
- Disk IO
Contoh:
docker run --memory=256m --cpus=0.5 app
Lifecycle Container Docker #
- Created → container dibuat
- Running → process utama berjalan
- Paused → process dihentikan sementara
- Stopped → process berhenti
- Removed → container dihapus
Command penting:
docker ps
docker ps -a
docker start
docker stop
docker restart
docker rm
Stateless vs Stateful Container #
Stateless Container #
- Tidak menyimpan data
- Aman untuk dihapus kapan saja
- Cocok untuk API, worker, frontend
Contoh:
docker run my-api
Stateful Container #
- Menyimpan data
- Membutuhkan volume
Contoh:
docker run -v db_data:/var/lib/mysql mysql
Best practice: container sebaiknya stateless
Networking di Container #
Jenis network Docker:
- bridge (default)
- host
- none
- overlay (swarm)
Contoh bridge:
docker network create app-net
docker run --network app-net api
docker run --network app-net db
Container bisa saling komunikasi via service name, bukan IP.
Container vs Virtual Machine #
| Aspek | Container | VM |
|---|---|---|
| Boot time | Detik | Menit |
| Resource | Ringan | Berat |
| Kernel | Shared | Dedicated |
| Density | Tinggi | Rendah |
Container unggul untuk:
- Microservices
- CI/CD
- Cloud-native
Container dalam Dunia Produksi #
Di production, container biasanya dijalankan menggunakan:
- Docker Compose (small setup)
- Kubernetes
- ECS / EKS
- Nomad
Container menjadi unit terkecil deployment modern.
Kesalahan Umum #
- ❌ Menganggap container sebagai server
- ❌ Menyimpan data penting di filesystem container
- ❌ Menggunakan image terlalu besar
- ❌ Menjalankan banyak service dalam satu container
Best Practice #
1. Satu Container = Satu Proses Utama #
Jangan jalankan banyak service dalam satu container.
2. Jangan Simpan State di Container #
Gunakan volume atau external storage.
3. Gunakan Image Kecil #
Lebih cepat, aman, dan efisien.
4. Tangani Signal dengan Benar #
Process harus bisa menerima SIGTERM.
5. Jangan Gunakan Container sebagai VM #
Container bukan untuk SSH dan manual operation.
Penutup #
Container adalah fondasi utama ekosistem Docker dan cloud-native.
Memahami container secara benar akan membuat kamu:
- Lebih paham arsitektur modern
- Lebih siap ke Kubernetes
- Lebih disiplin dalam desain aplikasi
Jika Docker adalah “platform”, maka container adalah nyawanya.