Podman: Alternatif Docker yang Aman dan Daemonless

Docker sudah lama menjadi standar de facto untuk containerization. Tapi ada satu nama yang semakin populer di kalangan DevOps dan sysadmin: Podman. Dikembangkan oleh Red Hat, Podman menawarkan cara kerja container yang berbeda secara fundamental — tanpa daemon, tanpa hak akses root untuk pengguna biasa, dan kompatibel dengan sebagian besar perintah Docker. Artikel ini akan membahas Podman secara lengkap: apa itu, cara install, perbedaan dengan Docker, sampai penggunaannya di production.
Apa Itu Podman?
Podman adalah container engine open source yang dikembangkan Red Hat. Nama Podman sendiri berasal dari kata Pod Manager — karena konsep pod-nya yang diadopsi dari Kubernetes. Podman memungkinkan kamu menjalankan container dan pod tanpa memerlukan daemon di latar belakang. Setiap container dijalankan sebagai proses langsung oleh runtime (contohnya runc atau crun), sehingga lebih ringan dan lebih mudah di-debug.
Salah satu keunggulan utama Podman adalah sifatnya yang daemonless. Docker memerlukan daemon dockerd yang berjalan terus-menerus dan punya hak akses penuh ke sistem. Kalau daemon ini crash, semua container ikut bermasalah. Podman tidak punya masalah ini — setiap container adalah proses independen yang dikelola langsung oleh systemd atau user.
Podman juga dirancang rootless. Pengguna biasa bisa menjalankan container tanpa sudo, tanpa menjadi root. Ini adalah lompatan besar dalam hal keamanan, karena container yang berjalan dengan hak pengguna biasa tidak bisa membahayakan sistem host secara langsung.
Podman vs Docker: Apa Bedanya?
| Aspek | Docker | Podman |
|---|---|---|
| Daemon | Perlu dockerd | Tanpa daemon |
| Rootless | Terbatas | Native |
| Arsitektur | Client-server | Fork-exec |
| Pod | Tidak native | Native (Kubernetes-style) |
| systemd integration | Manual | Generates unit files |
| Kompatibilitas CLI | Standar | Mirip Docker |
| Image format | OCI + Docker | OCI |
| Lisensi | Apache 2.0 (engine) | Apache 2.0 |
| Vendor | Docker Inc | Red Hat |
Banyak yang mengira Podman hanyalah "Docker tanpa daemon". Kenyataannya lebih dari itu. Berikut perbandingan keduanya:
| Aspek | Docker | Podman |
| Daemon | Perlu dockerd | Tanpa daemon |
| Rootless | Terbatas | Native |
| Arsitektur | Client-server | Fork-exec |
| Pod | Tidak native | Native (Kubernetes-style) |
| systemd integration | Manual | Generates unit files |
| Kompatibilitas CLI | Standar | Mirip Docker |
| Image format | OCI + Docker | OCI |
| Lisensi | Apache 2.0 (engine) | Apache 2.0 |
| Vendor | Docker Inc | Red Hat |
Perbedaan paling signifikan ada di arsitektur. Docker memakai model client-server: perintah docker yang kamu ketik dikirim ke daemon dockerd via REST API. Podman memakai model fork-exec: perintah podman langsung fork proses runtime untuk setiap container. Ini berarti Podman tidak punya single point of failure dan lebih transparan.
Untuk urusan pod, Podman unggul jauh. Pod di Podman memungkinkan beberapa container berbagi network namespace, IP, dan port — persis seperti pod di Kubernetes. Ini membuat transisi dari Podman ke Kubernetes sangat mulus.
Cara Install Podman
Podman tersedia di hampir semua distro Linux. Berikut cara install di beberapa distro populer.
Install di Debian/Ubuntu:
apt update
apt install podman -y
Install di Fedora:
dnf install podman -y
Install di Arch Linux:
pacman -S podman
Install di RHEL/CentOS:
dnf install podman -y
Setelah install, cek versi:
podman --version
Perintah Dasar Podman
Buat pengguna Docker, perintah Podman hampir identik. Ini beberapa perintah yang paling sering dipakai.
Menjalankan container:
podman run -d --name nginx-test -p 8080:80 nginx:alpine
Melihat daftar container:
podman ps
podman ps -a
Melihat daftar image:
podman images
Menarik image:
podman pull alpine:latest
Menghapus container:
podman rm -f nginx-test
Menghapus image:
podman rmi alpine:latest
Masuk ke container:
podman exec -it nginx-test sh
Melihat log:
podman logs -f nginx-test
Perintah-perintah di atas persis sama dengan Docker. Kalo kamu sudah terbiasa Docker, kamu tidak akan kesulitan pindah ke Podman. Bahkan, banyak script dan tutorial Docker yang langsung jalan tanpa perubahan.
Bekerja dengan Pod
Pod adalah fitur unggulan Podman. Satu pod berisi beberapa container yang berbagi jaringan dan storage. Ini contoh membuat pod dengan dua container:
podman pod create --name my-pod -p 8080:80
podman run -d --pod my-pod --name web nginx:alpine
podman run -d --pod my-pod --name db postgres:16-alpine
Cek pod:
podman pod ps
Hentikan dan hapus pod:
podman pod stop my-pod
podman pod rm my-pod
Pod sangat berguna saat kamu ingin menjalankan aplikasi multi-container seperti web server + database + cache dalam satu unit logis. Ketika pod dihentikan, semua container di dalamnya ikut berhenti.
Podman dan systemd
Salah satu keunggulan Podman yang jarang dimiliki container engine lain adalah integrasi native dengan systemd. Kamu bisa generate unit file systemd dari container atau pod yang sedang berjalan:
podman generate systemd --new --name nginx-test
Perintah di atas menghasilkan unit file systemd yang siap dipakai. Simpan ke /etc/systemd/system/ lalu enable:
systemctl daemon-reload
systemctl enable --now container-nginx-test.service
Dengan cara ini, container kamu otomatis hidup saat boot dan dikelola layaknya service biasa. Sangat cocok untuk production server yang butuh reliability.
Rootless Container
Podman bisa berjalan sepenuhnya tanpa root. Pengguna biasa cukup melakukan setup awal:
podman unshare
podman system migrate
Setelah itu, pengguna bisa langsung menjalankan container:
podman run -d -p 8080:80 nginx:alpine
Container rootless ini berjalan dalam user namespace sendiri, jadi walaupun proses di dalam container terlihat root, sebenarnya ia berjalan dengan izin pengguna biasa di host. Ini membuat Podman jauh lebih aman daripada Docker yang default-nya berjalan sebagai root.
Port forwarding di rootless mode otomatis di-handle oleh podman. Jadi kamu tetap bisa expose port ke jaringan tanpa masalah.
Podman dan Docker Compose
Banyak pengguna Docker yang bergantung pada docker-compose. Kabar baiknya, Podman mendukung file compose lewat perintah podman-compose:
apt install podman-compose -y
podman-compose up -d
podman-compose ps
podman-compose down
Podman juga bisa dipasangkan dengan podman-compose atau docker-compose (via socket activation) untuk workload yang sudah memakai compose file. Ini memudahkan migrasi bertahap dari Docker.
Perintah Alias
Kalo kamu ingin pengalaman persis Docker, buat alias:
alias docker=podman
Tapi perlu diingat: walaupun CLI-nya mirip, Podman tidak selalu 100% kompatibel dengan Docker API. Untuk tool yang butuh Docker socket (seperti Portainer atau Jenkins plugin), kamu perlu socket activation:
systemctl --user enable --now podman.socket
Kemudian arahkan tool ke unix:///run/user/1000/podman/podman.sock.
Kapan Menggunakan Podman?
Podman cocok digunakan ketika:
Sementara itu, Docker tetap pilihan baik kalo kamu butuh ekosistem tools yang paling matang, seperti Docker Desktop, Swarm, atau dukungan penuh Docker API.
Podman di Production
Podman sudah dipakai di production oleh banyak perusahaan besar, termasuk Red Hat OpenShift yang menggunakan CRI-O (runtime berbasis Podman) sebagai fondasinya. Kombinasi Podman + systemd + Quadlet memberikan cara deployment yang stabil dan mudah dikelola.
Quadlet adalah fitur yang memungkinkan kamu mendefinisikan container dalam file unit systemd langsung:
[Unit]
Description=Nginx container
[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
[Service]
Restart=always
[Install]
WantedBy=default.target
Simpan file di ~/.config/containers/systemd/nginx.container lalu jalankan:
systemctl --user daemon-reload
systemctl --user start nginx.service
Container didefinisikan sebagai unit systemd, otomatis restart kalau crash, dan mulai saat login. Ini pattern yang sangat rapi untuk production.
Troubleshooting Umum
Kadang muncul masalah saat memakai Podman. Berikut solusi untuk beberapa masalah umum.
Container tidak bisa akses internet:
Periksa network mode:
podman network ls
podman run --network=host ...
Permission denied saat rootless:
Pastikan user namespace sudah di-setup:
podman unshare
podman system migrate
Image pull lambat:
Set mirror di /etc/containers/registries.conf:
[registries.search]
registries = ["docker.io", "quay.io"]
DNS tidak resolve di container:
Tambahkan dns ke perintah run:
podman run --dns 8.8.8.8 ...
FAQ
Apakah Podman bisa menggantikan Docker sepenuhnya?
Bisa untuk sebagian besar kasus. CLI-nya mirip, image OCI kompatibel, dan support compose via podman-compose. Kecuali kamu butuh fitur Docker spesifik seperti Docker Swarm atau Docker Desktop, Podman bisa jadi pengganti penuh.
Apakah Podman aman dipakai tanpa root?
Ya. Rootless adalah fitur utama Podman. Container berjalan dalam user namespace sehingga tidak bisa mengakses sistem host secara langsung. Ini justru lebih aman daripada Docker yang berjalan sebagai root.
Apakah image Docker bisa dipakai di Podman?
Bisa. Podman menggunakan format image OCI yang sama dengan Docker. Image dari Docker Hub bisa langsung di-pull dan dijalankan tanpa konversi.
Bagaimana cara migrasi dari Docker ke Podman?
Paling gampang: alias docker=podman lalu jalankan ulang workload. Untuk compose, pakai podman-compose up -d. Untuk integrasi systemd, generate unit file dengan podman generate systemd.
Kesimpulan
Podman bukan sekadar tiruan Docker. Ia adalah container engine modern dengan arsitektur yang lebih aman dan sederhana — daemonless, rootless, dan native pod support. Bagi kamu yang serius dengan containerization, Podman layak jadi pilihan utama. Mulai dari hal kecil: install Podman, jalankan container pertama, lalu eksplorasi fitur pod dan systemd-nya. Semakin cepat kamu pindah, semakin cepat kamu merasakan manfaatnya.