Mengenal Podman
Mengenal Podman Alternatif dari Docker Container

Mengenal Podman: Alternatif dari Docker Container

Jika kamu bekerja dengan container, pasti tak asing dengan Docker. Tapi tahukah kamu bahwa ada alat lain yang menawarkan pendekatan lebih aman dan fleksibel?

Podman hadir sebagai alternatif open-source yang kompatibel dengan Docker, namun dengan arsitektur tanpa daemon (daemonless) yang menghilangkan single point of failure.

Mengenal Podman
Mengenal Podman

Apa Itu Podman?

Podman (Pod Manager) adalah sebuah alat (tool) open-source yang digunakan untuk mengembangkan, mengelola, dan menjalankan kontainer (seperti aplikasi yang dikemas dengan semua dependensinya) dan pod (sekumpulan kontainer yang berbagi sumber daya).

Secara sederhana, Podman adalah alternatif dari Docker yang memiliki arsitektur yang lebih aman dan modern.

Arsitektur Podman

Arsitektur Podman dibangun di atas beberapa prinsip inti yang membedakannya dari pendahulunya (seperti Docker). Berikut adalah penjelasan mendetailnya:

Podman CLI

Ini adalah antarmuka utama yang digunakan pengguna. Perintah seperti podman run, podman ps, podman build berasal dari sini. CLI tidak berkomunikasi dengan daemon, melainkan langsung mengeksekusi perintah.

OCI Runtime (runc atau crun)

Podman memanfaatkan runc (runtime default) atau crun (yang lebih ringan dan cepat, cocok untuk sistem tanpa root) untuk menjalankan kontainer sesuai dengan spesifikasi Open Container Initiative (OCI).

Containers/Storage Library

Library ini menangani semua hal yang berkaitan dengan penyimpanan. Image Management, Mengunduh, menyimpan, dan mengelola layer-layer image (menggunakan overlayfs atau vfs).

Container Layer, Membuat layer penulisan (writeable layer) untuk setiap kontainer. Cache dan Metadata, Menyimpan metadata tentang image, kontainer, dan pod.

Containers/Image Library

Library ini bertanggung jawab untuk interaksi dengan registri image (seperti Docker Hub, Quay.io).

Pod Concept (Model Pod Kubernetes)

Podman dapat mengelola Pod, yaitu sekelompok kontainer yang berbagi namespace tertentu (seperti network, UTS, IPC).

Konsep ini diambil langsung dari Kubernetes, sehingga memudahkan pembuatan dan pengujian workload Kubernetes di lingkungan lokal.

Pod dikelola oleh sebuah proses infrastruktur bernama conmon yang menangani logging dan manajemen siklus hidup kontainer dalam pod.

Conmon (Container Monitor)

conmon adalah komponen penting yang bertugas. Melacak proses utama (main process) dalam kontainer. Menangani logging (menulis stdout/stderr ke disk). Menyimpan kode keluar (exit code) kontainer. Memungkinkan fitur attach ke kontainer yang sedang berjalan.

Rootless Mode (Mode Tanpa Root)

Ini adalah fitur keamanan utama Podman. Memungkinkan user non-root untuk menjalankan, mengelola, dan membuat kontainer tanpa hak istimewa.

Dicapai dengan memanfaatkan User Namespaces di Linux, yang memetakan UID/GID user di dalam kontainer ke UID/GID non-root di host.

Sangat mengurangi risiko eksploitasi karena jika kontainer berhasil dibobol, penyerang tidak akan memiliki akses root ke host system.

Podman Machine (Untuk macOS dan Windows)

Karena Podman memerlukan kernel Linux untuk menjalankan kontainer, di sistem non-Linux (macOS/Windows), Podman menggunakan mesin virtual Linux yang ringan.

podman machine digunakan untuk membuat, mengelola, dan menghubungkan ke VM (biasanya menggunakan QEMU) di mana engine Podman yang sebenarnya berjalan.

Podman CLI di macOS/Windows kemudian bertindak sebagai Podman Remote, yang berkomunikasi dengan Podman di dalam VM melalui soket.

Systemd Integration

Podman dirancang untuk terintegrasi dengan baik dengan systemd. Kamu dapat menghasilkan file unit systemd dari kontainer yang sedang berjalan menggunakan podman generate systemd.

Ini memungkinkan kontainer untuk dikelola seperti layanan sistem lainnya (start, stop, enable pada boot).

Systemd dapat secara langsung mengelola proses podman run, yang lebih sederhana dan robust dibandingkan dengan Docker yang memerlukan layanan perantara.

Keunggulan Podman

  1. Berjalan secara daemonless. Setiap perintah Podman (seperti podman run) langsung memulai proses kontainer itu sendiri dan menjadi induk dari proses tersebut. Kontainer berjalan sebagai anak proses dari perintah Podman.
  2. Podman dapat menjalankan kontainer secara rootless (tanpa hak akses root/administrator) secara default. Ini berarti pengguna non-root dapat menjalankan, mengelola, dan membangun kontainer tanpa perlu masuk ke akun root atau ditambahkan ke grup docker.
  3. Kamu dapat membuat file unit systemd untuk mengatur siklus hidup kontainer (menjalankan saat boot, restart otomatis jika gagal, dependensi, dll.) dengan cara yang sama seperti mengelola layanan sistem biasa.
  4. Podman dirancang agar mudah diadopsi oleh pengguna Docker. Podman bahkan menyediakan alias docker untuk podman, sehingga kamu dapat mengetik docker dan secara transparan menggunakan Podman. Fitur ini disebut podman-docker.
  5. Seperti namanya, Podman dapat membuat dan mengelola Pods. Sebuah Pod adalah sekelompok satu atau lebih kontainer yang berbagi sumber daya seperti jaringan dan penyimpanan. Konsep ini persis seperti Pods di Kubernetes.
  6. Podman dapat menjalankan docker-compose.yml menggunakan podman-compose, sebuah proyek terpisah yang meniru fungsionalitas Docker Compose.

Perbedaan dengan Docker

Meskipun podman menawarkan sejumlah keunggulan, Docker tetap menjadi salah satu alat yang sangat populer dalam management container. beberapa perbandingannya adalah sebagai berikut.

Docker menggunakan architecture client-server, sedangkan podman daemon-less. Podman memiliki keunggulan dari segi keamanan dengan menjalankannya sebagai proses biasa,

Sedangkan Docker memerlukan hak istimewa root. Docker memiliki dukungan yang lebih baik, sementara podman masih dalam tahap pengembangan, meskipun mendapat dukungan dari komunitas.