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 #

AspekImageContainer
SifatImmutableMutable (runtime)
FungsiTemplateRuntime execution
Bisa dijalankanTidakYa
Bisa diubahTidakYa (selama hidup)

Satu image bisa menghasilkan banyak container.


Bagaimana Container Bekerja di Balik Layar? #

Saat menjalankan:

docker run nginx

Docker melakukan langkah berikut:

  1. Mencari image nginx secara lokal
  2. Jika tidak ada, pull dari registry
  3. Membuat writable layer baru di atas image
  4. Mengatur namespace (PID, NET, MNT, UTS, IPC)
  5. Mengatur cgroups (CPU, memory, IO limit)
  6. Menjalankan process utama (PID 1)

Container hidup selama process utama masih berjalan.


Komponen Isolasi Container #

Namespace #

Namespace memberikan ilusi bahwa container memiliki sistem sendiri.

NamespaceFungsi
PIDIsolasi process
NETNetwork sendiri
MNTFilesystem
UTSHostname
IPCInter-process communication

cgroups #

Control Groups membatasi resource:

  • CPU
  • Memory
  • Disk IO

Contoh:

docker run --memory=256m --cpus=0.5 app

Lifecycle Container Docker #

  1. Created → container dibuat
  2. Running → process utama berjalan
  3. Paused → process dihentikan sementara
  4. Stopped → process berhenti
  5. 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 #

AspekContainerVM
Boot timeDetikMenit
ResourceRinganBerat
KernelSharedDedicated
DensityTinggiRendah

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.

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