- Docker telah lama dikritik karena masalah kerentanan keamanan dan konsumsi sumber daya akibat arsitektur daemon latar belakang (dockerd)
- Podman mengadopsi arsitektur tanpa daemon, sehingga container berjalan langsung dengan izin pengguna, mengurangi attack surface dan meningkatkan stabilitas
- Dukungan integrasi Systemd, desain yang ramah Kubernetes, serta alat terpisah berbasis filosofi Unix seperti Buildah/Skopeo meningkatkan efisiensi operasional
- Tetap sangat kompatibel dengan Docker CLI, sehingga sebagian besar workflow lama tetap berjalan hanya dengan
alias docker=podman
- Bahkan di lingkungan produksi nyata, keamanan dan manajemen sumber daya menjadi lebih sederhana, dan untuk proyek baru Podman menjadi pilihan yang lebih masuk akal dan berorientasi masa depan
Keterbatasan Docker dan masalah keamanan
- Docker memiliki arsitektur di mana daemon dockerd selalu berjalan dengan hak akses root
- Jika kerentanan pada daemon ditemukan, seluruh host bisa terekspos pada risiko
- Contoh kasus isu keamanan utama
- 2019: container escape runC (CVE-2019-5736)
- 2022: kerentanan Linux Dirty Pipe, escape cgroups v1
- 2024: runC “Leaky Vessels”, kerentanan BuildKit
- 2024: kampanye cryptojacking melalui paparan Docker API
- Peristiwa semacam ini yang terus berulang menunjukkan risiko mendasar dari arsitektur berbasis daemon
Arsitektur daemonless Podman
- Podman tidak menggunakan daemon latar belakang
- Saat
podman run dijalankan, container bekerja sebagai proses anak langsung dari eksekutor perintah
- Karena berjalan dalam mode rootless, bahkan hak akses root di dalam container di host hanya setara dengan hak akses pengguna biasa
- Keunggulan
- Keamanan meningkat: cakupan dampak saat terjadi container escape berkurang
- Stabilitas terjaga: jika satu container mati, container lain tidak terdampak
- Efisiensi sumber daya: penggunaan memori menurun karena tidak ada daemon yang terus aktif tanpa perlu
Fitur pembeda Podman
- Integrasi Systemd
- Dapat membuat file unit systemd secara otomatis dengan
podman generate systemd
- Layanan dapat dikelola dengan perintah standar
systemctl
- Ramah Kubernetes
- Konsep Pod sudah terintegrasi secara bawaan sehingga memudahkan pengembangan aplikasi multi-container
- Dapat langsung membuat Kubernetes YAML dengan
podman generate kube
- Filosofi Unix
- Podman fokus pada eksekusi container, sementara build image menggunakan Buildah, dan pengelolaan registry menggunakan Skopeo
- Memungkinkan penggunaan alat yang dioptimalkan sesuai tujuan
Proses migrasi dan kompatibilitas
- Peralihan dari Docker ke Podman hampir tanpa gangguan
- CLI kompatibel sehingga
podman dapat digunakan langsung sebagai pengganti docker
- Dockerfile yang sudah ada juga tetap berfungsi
- Perbedaannya
- Dalam mode rootless, binding ke port di bawah 1024 tidak memungkinkan → disarankan memakai reverse proxy
- Perlu pengelolaan izin volume
- Alat yang bergantung pada Docker socket dapat menggunakan mode kompatibilitas Docker API milik Podman
Penerapan praktis dan manfaatnya
- Setelah menggunakan Podman di lingkungan operasional
- Beban pemeriksaan keamanan berkurang, dengan keamanan rootless diterapkan secara default
- Pola penggunaan sumber daya menjadi lebih sederhana dan mudah diprediksi
- Docker masih populer, tetapi untuk proyek baru atau ketika ada kebebasan memilih teknologi, Podman lebih cocok
- Integrasi alami dengan sistem manajemen Linux
- Arsitektur yang berorientasi Kubernetes
- Menyediakan lingkungan eksekusi container yang lebih aman dan rasional
Ringkasan panduan migrasi FastAPI
- Dockerfile yang ada tetap bisa digunakan
- Cukup ganti dengan
podman build, podman run
- Daftarkan sebagai layanan systemd dengan
podman generate systemd
- Gunakan Pod untuk mendukung lingkungan multi-layanan seperti DB
- Workflow Docker Compose dapat ditangani dengan
podman-compose atau konversi kompose
8 komentar
Di sini tertulis bahwa peralihan tanpa downtime itu memungkinkan, tetapi di lingkungan operasional nyata ternyata ada banyak hal aneh. Misalnya, di lingkungan mac, karena konfigurasi bawaan memakai kompresi zstd, image yang dibangun jadi cukup banyak membebani registry, dan semacamnya..
Docker maupun podman semuanya....
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
securityContext:
runAsNonRoot: true
runAsUser: UID
Sebenarnya kompatibilitas dengan Docker tidak terlalu baik, jadi kegunaannya juga tidak begitu bagus...
Saya sempat pindah ke Podman karena mempertimbangkan rootless, lalu akhirnya kembali lagi ke Docker.
Seperti kata orang lain, kalau mau pakai untuk Kubernetes ya sekalian saja pakai containerd.
Saya jadi bertanya-tanya, kalau
Docker composetidak berjalan dengan baik dan keunggulannya adalah kompatibilitas Kubernetes yang bagus, bukankah lebih baik langsung pakai Kubernetes saja?Saya juga sempat ingin mencobanya, tetapi karena tidak bisa langsung berjalan sekaligus dan juga tidak bisa melakukan pemetaan port di bawah 1024 secara langsung, akhirnya saya memakai kombinasi k3s dan
nerdctluntuk build image.Saya memang sudah lama ingin beralih, tetapi ketika mencobanya sebelumnya, berbeda dari yang sering dikatakan para developer, terlalu banyak proyek
docker composeyang tidak berjalan dengan semestinya...Dukungan untuk Docker network memang tidak ada.
Setahu saya, seperti Docker, ini juga mendukung fitur jaringan
Apakah masih ada hal yang belum benar-benar berfungsi?
Komentar Hacker News
chrootdan jail agar bisa menghindari penyalinan file yang tidak perlu dan masalah dependensi. Kode deployment saya menjalankan perangkat lunak di luar lingkungan jail, lalu memantau file yang dibuka proses denganptrace. Dari output itu saya mengekstrak daftar dependensi dan memaketkannya. Hasilnya, deployment menjadi kecil, immutable, dan lebih aman. Ketika Docker muncul, saya teringat pendekatan lama itu, dan saya penasaran apakah ada alat serupa yang memantau riwayat penggunaan file kontainer Docker untuk mengecilkan distribusigit push live masterlalu ter-deploy. Saya sudah banyak memakai Docker, tapi ini adalah deployment termudah. Saya paham kelebihan Docker, tetapi menyiapkan HTTP di Ubuntu atau OpenBSD juga tidak terlalu sulit. Saya ragu apakah reproduksibilitas khas Docker benar-benar sepadan dengan overhead pengelolaan tambahan ituTautan kode terkait
--connectionuntuk memilih lingkungan yang diinginkan. Jika perlu, Podman juga bisa membuat VM otomatis untuk Anda (menggunakan lima). Podman Desktop juga punya lapisan kompatibilitas Docker untuk mengurangi masalah kompatibilitaspodman generate systemdyang disebut di artikel sekarang sudah deprecated. Alternatifnya adalah Podman Quadlets, yang mirip docker-compose.yaml tetapi didefinisikan di dalam file unit systemd/devyang diperlukan, lalu mengekspos program yang sangat terbatas pada jaringan yang terisolasidi sini,
di sini,
dan di sini