
Cara Kerja Docker dan Kontainerisasi: Memahami Arsitektur, Image, hingga Container
Pernahkah aplikasi yang berjalan mulus di laptop Anda tiba-tiba gagal saat dipindahkan ke server? Masalah “jalan di komputer saya” adalah keluhan klasik yang kemudian melahirkan kontainerisasi, dan Docker menjadi platform paling populer untuk melakukannya. Dengan Docker, aplikasi beserta seluruh dependensinya dikemas dalam satu paket yang berperilaku identik di lingkungan mana pun — mulai dari laptop developer hingga server produksi di cloud.
Artikel ini membahas cara kerja Docker dan kontainerisasi secara ringkas namun menyeluruh: arsitektur client-server yang menjadi fondasinya, peran image dan container, hingga teknologi kernel Linux yang membuat isolasi tersebut mungkin. Sebagai pelengkap, Anda juga bisa merujuk langsung ke dokumentasi resmi Docker tentang gambaran umum platform-nya yang menjadi referensi utama tulisan ini.
Apa Itu Docker dan Kontainerisasi?
Docker adalah platform terbuka untuk mengembangkan, mengirim, dan menjalankan aplikasi. Inti idenya adalah memisahkan aplikasi dari infrastruktur: alih-alih menginstal dependensi satu per satu di setiap server, Anda mengemas aplikasi dalam lingkungan terisolasi yang disebut container. Container bersifat ringan karena berisi semua yang dibutuhkan aplikasi untuk berjalan — kode, runtime, library, dan konfigurasi — tanpa bergantung pada apa yang terpasang di mesin host.
Karena isinya terstandar, container yang Anda bagikan ke rekan tim akan berjalan sama persis seperti di mesin Anda. Docker pun menyediakan tooling untuk mengelola seluruh siklus hidup kontainer: mengembangkan aplikasi bersama komponen pendukungnya, menjadikan container sebagai unit distribusi dan pengujian, lalu men-deploy-nya ke lingkungan produksi — baik di data center lokal, cloud provider, maupun kombinasi keduanya.
Arsitektur Docker: Client, Daemon, dan Registry
Docker memakai arsitektur client-server. Docker client berkomunikasi dengan Docker daemon (dockerd) yang mengerjakan pekerjaan berat: membangun, menjalankan, dan mendistribusikan container. Keduanya bisa berjalan di sistem yang sama, atau client terhubung ke daemon jarak jauh — komunikasinya memakai REST API melalui UNIX socket atau antarmuka jaringan. Selain CLI docker, ada juga Docker Compose, client lain yang memungkinkan Anda mengelola aplikasi yang tersusun atas banyak container sekaligus.
Peran Docker daemon
Daemon mendengarkan permintaan Docker API dan mengelola objek Docker seperti image, container, network, dan volume. Daemon juga dapat berkomunikasi dengan daemon lain untuk mengelola Docker services — inilah fondasi ketika kontainer dijalankan dalam skala besar yang melintasi beberapa host sekaligus.
Registry: Docker Hub dan registry privat
Registry adalah tempat penyimpanan image. Docker Hub adalah registry publik default yang dipakai Docker untuk mencari image, meskipun Anda juga bisa menjalankan registry privat untuk kebutuhan internal tim. Saat menjalankan docker pull atau docker run, Docker mengunduh image yang dibutuhkan dari registry yang dikonfigurasi; sebaliknya, docker push mengunggah image buatan Anda ke sana. Adapun bagi Anda yang menginginkan paket lengkap, Docker Desktop menyediakan aplikasi siap install untuk Mac, Windows, dan Linux yang mencakup daemon, client, Docker Compose, Kubernetes, hingga Credential Helper.
Image dan Container: Dua Objek Inti Docker
Image: cetak biru read-only
Image adalah templat read-only berisi instruksi untuk membuat container. Umumnya sebuah image dibangun di atas image lain — misalnya image Ubuntu yang ditambahkan web server Apache beserta aplikasi dan konfigurasi yang dibutuhkan. Untuk membuat image sendiri, Anda menulis Dockerfile, sebuah file dengan sintaks sederhana yang mendefinisikan langkah-langkah pembuatan image dan cara menjalankannya. Setiap instruksi di Dockerfile menciptakan satu layer; saat Dockerfile diubah dan image dibangun ulang, hanya layer yang berubah yang dibangun kembali. Mekanisme berlapis inilah yang membuat image jauh lebih ringan, kecil, dan cepat dibandingkan teknologi virtualisasi lain.
Container: instance yang bisa berjalan
Container adalah instance dari image yang dapat dijalankan — Anda bisa membuat, memulai, menghentikan, memindahkan, atau menghapusnya lewat Docker API/CLI. Container dapat dihubungkan ke satu atau lebih jaringan, diberi penyimpanan tambahan, atau dijadikan dasar pembuatan image baru. Secara bawaan, container terisolasi cukup baik dari container lain dan dari mesin host, dan tingkat isolasi jaringan maupun penyimpanannya dapat Anda kendalikan. Satu hal yang perlu diingat: ketika container dihapus, perubahan status yang tidak disimpan di penyimpanan persisten akan hilang bersamanya.
Apa yang Terjadi Saat `docker run` Dijalankan?
Perintah sederhana seperti docker run -i -t ubuntu /bin/bash terlihat sepele, tetapi di baliknya Docker melakukan serangkaian langkah berurutan (dengan asumsi memakai konfigurasi registry bawaan):
- Mengunduh image
ubuntudari registry bila belum tersedia secara lokal — setara dengan menjalankandocker pull ubuntusecara manual. - Membuat container baru berdasarkan image tersebut.
- Mengalokasikan filesystem read-write sebagai layer terakhir container, sehingga proses di dalamnya bisa membuat atau mengubah file dan direktori.
- Membuat antarmuka jaringan untuk menghubungkan container ke jaringan bawaan, termasuk pemberian alamat IP. Secara bawaan, container dapat terhubung ke jaringan eksternal lewat koneksi jaringan mesin host.
- Menjalankan container dan mengeksekusi
/bin/bash. Karena flag-i -t, container berjalan interaktif dan terhubung ke terminal sehingga Anda bisa memberi input dari keyboard. Saat mengetikexit, container berhenti — tetapi tidak dihapus dan masih bisa dijalankan ulang.
Teknologi di Balik Kontainerisasi: Namespaces Kernel Linux
Docker ditulis dengan bahasa pemrograman Go dan mengandalkan sejumlah fitur kernel Linux. Kunci utamanya adalah namespaces: saat sebuah container dijalankan, Docker membuat rangkaian namespace yang menyediakan ruang kerja terisolasi bagi container tersebut. Setiap aspek container berjalan di namespace tersendiri dan aksesnya dibatasi hanya pada namespace itu. Tidak mengherankan jika platform alternatif seperti Podman memanfaatkan fondasi serupa — pembahasan soal perbedaan Podman dan Docker beserta keunggulan masing-masing bisa menjadi bacaan pelengkap sebelum Anda memilih tooling kontainer untuk proyek berikutnya.
Mengapa Docker Relevan untuk Alur Kerja Modern
Ada tiga alasan utama yang membuat Docker begitu mendominasi ekosistem. Pertama, pengiriman aplikasi yang cepat dan konsisten: developer bekerja di lingkungan terstandar dengan container lokal, mendorong aplikasi ke lingkungan uji, menjalankan pengujian otomatis maupun manual, lalu memperbaiki bug dan men-deploy ulang — alur yang bersinergi sempurna dengan pipeline CI/CD. Kedua, deployment dan penskalaan yang responsif: container dapat berjalan di laptop developer, mesin fisik atau virtual di data center, cloud provider, atau campuran ketiganya, sehingga workload bisa dinaikkan maupun dihentikan sesuai kebutuhan bisnis hampir secara real time.
Ketiga, efisiensi perangkat keras: karena ringan dan cepat, Docker menjadi alternatif yang layak bagi hypervisor berbasis virtual machine, sehingga kapasitas server dapat dimanfaatkan lebih maksimal untuk kebutuhan bisnis. Praktiknya pun sudah terbukti matang — container bukan hanya untuk aplikasi web, tetapi juga dipakai mengoptimalkan infrastruktur database, misalnya pembahasan optimasi replikasi MySQL menggunakan ProxySQL di Docker yang memperlihatkan bagaimana container dirangkai dengan load balancing database.
Kesimpulan
Memahami cara kerja Docker dan kontainerisasi pada dasarnya bermuara pada tiga konsep: arsitektur client-server yang memisahkan Docker client dari daemon, pasangan image dan container sebagai cetak biru serta instance yang berjalan, dan namespaces kernel Linux sebagai mesin isolasinya. Dari titik ini, topik lanjutan seperti jaringan kontainer, volume persisten, hingga orchestration dengan Kubernetes menjadi jauh lebih mudah dipahami. Jika Anda baru memulai, langkah terbaik tetap langsung mencoba: install Docker, tulis Dockerfile pertama Anda, dan rasakan sendiri keseragaman lingkungan yang ditawarkan kontainer.
Foto sampul oleh Bernd Dittrich di Unsplash.



