Membongkar arsitektur daemonless Podman: model fork/exec yang menjalankan container langsung oleh runtime sebagai child process, ekosistem Podman-Buildah-Skopeo-CRI-O, serta kepatuhan terhadap standar OCI yang membuat image dan runtime saling kompatibel.

Episode 1 menjelaskan mengapa Podman ada: sebagai alternatif daemonless terhadap Docker. Episode 2 ini membuka kap mesinnya — bagaimana arsitektur daemonless benar-benar bekerja, siapa saja komponen ekosistemnya, dan mengapa standar OCI membuat semuanya saling terhubung. Setelah ini, kalian tidak lagi melihat Podman sebagai sekadar perintah, melainkan sebagai arsitektur.
Klaim utama Podman adalah tidak memakai daemon. Bagaimana caranya? Model yang dipakai disebut fork/exec.
Ketika kalian menjalankan perintah podman run, alurnya seperti ini:
podman melakukan serangkaian persiapan: membaca konfigurasi, menyiapkan storage, dan memuat image.crun atau runc — menjalankan container sebagai child process langsung dari proses tersebut.conmon kecil mengawasi container, meneruskan log, dan menjaga agar container tidak menjadi proses zombie.Karena tidak ada daemon sentral, setiap container adalah turunan langsung dari proses yang memintanya. Bandingkan dengan Docker yang harus berkomunikasi dengan daemon yang selalu berjalan:
| Aspek | Docker | Podman |
|---|---|---|
| Proses pengawas | Daemon dockerd selalu berjalan | Tidak ada daemon, hanya runtime anak |
| Jalur eksekusi | Client, API, daemon, runtime | Client fork, runtime langsung |
| Kegagalan daemon | Container ikut terganggu | Container terus berjalan |
Podman mendukung lebih dari satu runtime, dan keduanya adalah implementasi dari standar yang sama:
Perbedaan bahasa pemrograman tidak mengubah perilaku dari sisi kalian — keduanya menjalankan container sesuai standar yang sama. Yang penting adalah bahwa keduanya berjalan sebagai child process, bukan di bawah satu daemon.
Kalian bisa membuktikan model ini sendiri: jalankan container, lalu amati prosesnya dari host:
podman run -d --name web nginx:latest
ps -ef | grep conmon
ps -ef | grep nginxKalian akan melihat proses conmon dan proses nginx yang berjalan sebagai proses biasa di host — bukan di bawah satu proses daemon. Ini bukti paling nyata dari model fork/exec.
Podman hanyalah satu dari sekian proyek yang membentuk ekosistem container Red Hat. Masing-masing memegang peran spesifik:
| Proyek | Peran |
|---|---|
| Podman | Menjalankan dan mengelola container serta pods |
| Buildah | Membangun image dari Containerfile |
| Skopeo | Memeriksa dan menyalin image antar registry |
| CRI-O | Runtime container khusus Kubernetes |
Pembagian peran ini membuat setiap proyek fokus pada satu pekerjaan: Podman untuk operasi runtime, Buildah untuk membangun image, Skopeo untuk memindahkan image, dan CRI-O untuk mesin container Kubernetes.
Proyek-proyek ini tidak bekerja dalam silo. Contoh nyata kerja samanya:
Alur kerja ini adalah alasan kalian sering melihat Podman, Buildah, dan Skopeo dipasang berdampingan di satu mesin. Di episode 4, kalian akan memakai Skopeo secara langsung.
Di balik layar, Podman membaca konfigurasi untuk menentukan di mana image disimpan dan dari mana image diambil. Storage diatur di containers/storage, sementara registri diatur lewat registries.conf:
[registries.search]
registries = ["docker.io", "quay.io"]
[registries.insecure]
registries = []registries.search menentukan urutan registry yang dicari saat kalian memanggil image tanpa prefix penuh, seperti podman pull nginx. Bagian insecure berisi registry yang diizinkan memakai HTTP tanpa TLS — sebaiknya biarkan kosong di lingkungan produksi.
Agar semua proyek ini bisa bekerja bersama, ada satu pengikat: standar dari OCI (Open Container Initiative). Ada dua spesifikasi inti yang relevan:
crun dan runc adalah implementasi dari spesifikasi ini.Kepatuhan OCI inilah yang membuat kalian bisa menjalankan image yang dibangun dengan Buildah memakai runtime crun, atau image dari Docker Hub yang dimuat di Podman.
Efek samping terpentingnya adalah kompatibilitas dengan Kubernetes: karena CRI-O memakai runtime dan format image yang sama, container yang kalian jalankan di laptop dengan Podman bisa dipindahkan ke cluster Kubernetes tanpa modifikasi format. Standar ini pula yang membuat Docker dan Podman bisa saling berbagi image.
Important
Ingat pembagian peran ini: Podman untuk menjalankan, Buildah untuk membangun, Skopeo untuk memindahkan, CRI-O untuk Kubernetes. Ketika sebuah tugas terasa nyangkut di Podman, sering kali jawabannya ada di proyek lain yang lebih tepat.
Note
Karena Podman daemonless, proses container melekat pada sesi yang memintanya. Jika kalian menutup sesi terminal yang memulai container, container tetap berjalan — tetapi untuk mengelolanya dari sesi lain, gunakan podman start atau koneksi remote yang akan dibahas di episode lanjutan.
Episode 2 mengungkap arsitektur Podman: model fork/exec yang menjalankan setiap container langsung oleh runtime crun atau runc sebagai child process tanpa daemon sentral, ekosistem Podman-Buildah-Skopeo-CRI-O yang masing-masing punya peran, dan standar OCI yang menyatukan semuanya.
Inti yang harus dibawa pulang:
registries.conf mengontrol di mana Podman mencari image.Episode 3 berikutnya turun ke level praktik: kalian akan mulai hidup dengan perintah-perintah dasar pengelolaan container — run, pull, ps, logs, exec, inspect, stop, rm, stats — plus siklus hidup dan pembersihan.