Beranda

DevOps

Tutorial Podman Rootless: Menjalankan Co...

Tutorial Podman Rootless: Menjalankan Container Lebih Aman Tanpa Root

Panduan praktis Podman rootless untuk Linux: instalasi, konfigurasi user namespace, menjalankan Nginx, membuat pod, dan mengelola container dengan systemd Quadlet.

Tutorial Podman Rootless: Menjalankan Container Lebih Aman Tanpa Root
7 dibaca
Belum ada penilaian

Podman dan Docker sama-sama digunakan untuk menjalankan aplikasi dalam container. Perbedaan pentingnya bukan pada format image, melainkan pada cara container dijalankan dan hak akses yang dibutuhkan. Podman dirancang tanpa daemon pusat dan mendukung mode rootless secara langsung, sehingga cocok dipertimbangkan untuk server bersama, lingkungan pengembangan, dan deployment yang ingin membatasi hak istimewa.

Apa perbedaan Podman dan Docker?

Pada instalasi Docker Engine yang umum, perintah docker berkomunikasi dengan daemon dockerd. Daemon tersebut biasanya berjalan sebagai root. Karena itu, akses ke socket Docker atau keanggotaan grup docker dapat memberikan kemampuan yang setara dengan akses root pada host.

Podman tidak memerlukan daemon pusat yang terus berjalan. Perintah Podman membuat dan mengelola container secara langsung. Dalam mode rootless, proses container dijalankan dengan hak pengguna Linux biasa dan menggunakan user namespace untuk memetakan identitas di dalam container ke identitas yang tidak memiliki hak root pada host.

Aspek Docker Engine standar Podman rootless
Arsitektur Menggunakan daemon dockerd Tanpa daemon pusat
Hak akses Daemon umumnya berjalan sebagai root Container dapat dijalankan oleh user biasa
Image OCI Didukung Didukung
Pengelolaan layanan Umumnya melalui Docker/systemd atau restart policy Dapat terintegrasi dengan systemd melalui Quadlet
Workload berkelompok Docker Compose dan jaringan Pod, jaringan, serta dukungan alur kerja Kubernetes

Catatan keamanan: rootless mengurangi dampak jika container dikompromikan, tetapi bukan jaminan keamanan mutlak. Tetap gunakan image tepercaya, pembaruan rutin, pembatasan resource, dan konfigurasi jaringan yang benar.

Prasyarat

Siapkan server Linux yang didukung, akses terminal, koneksi internet, serta akun pengguna biasa dengan hak sudo untuk instalasi. Jalankan perintah container sebagai pengguna biasa, bukan sebagai root, kecuali langkah tertentu secara eksplisit memerlukan sudo.

Langkah 1 — Instal Podman

Di Ubuntu atau Debian:

sudo apt update
sudo apt install -y podman

Di Rocky Linux, AlmaLinux, atau RHEL:

sudo dnf install -y podman

Verifikasi instalasi:

podman --version
podman info

Jalankan perintah tersebut tanpa sudo agar Anda memeriksa lingkungan Podman milik pengguna saat ini. Versi yang tersedia dapat berbeda sesuai rilis distribusi Linux.

Langkah 2 — Periksa konfigurasi rootless

Podman rootless biasanya membutuhkan rentang subordinate user ID dan group ID. Periksa apakah akun Anda sudah memiliki entri:

grep "^$USER:" /etc/subuid /etc/subgid

Hasilnya umumnya berisi rentang ID, misalnya 100000:65536, untuk masing-masing berkas. Jika tidak ada, administrator dapat menambahkan rentang yang belum digunakan. Contoh berikut menggunakan nilai ilustratif; pastikan tidak bertabrakan dengan pengguna lain:

sudo usermod --add-subuids 100000-165535 \
  --add-subgids 100000-165535 "$USER"

Setelah mengubah pemetaan ID, logout lalu login kembali. Jika lingkungan Podman sudah pernah digunakan, tinjau dokumentasi distribusi sebelum menjalankan podman system migrate, karena migrasi dapat menghentikan container milik pengguna.

Untuk memeriksa apakah mode rootless aktif:

podman info --format '{{.Host.Security.Rootless}}'

Jika hasilnya true, Podman berjalan dalam mode rootless.

Langkah 3 — Jalankan container pertama

Kita akan menjalankan container Alpine yang tidur selama sepuluh menit:

podman run -d --name latihan-rootless \
  docker.io/library/alpine sleep 600

Periksa container yang berjalan:

podman ps
podman exec latihan-rootless whoami

Perintah terakhir dapat menampilkan root. Itu adalah identitas di dalam container, bukan bukti bahwa proses tersebut memiliki hak root pada host. User namespace memisahkan identitas container dari identitas host.

Lihat log atau detail container bila diperlukan:

podman logs latihan-rootless
podman inspect latihan-rootless

Setelah selesai, hapus container latihan:

podman rm -f latihan-rootless

Langkah 4 — Jalankan web server

Contoh berikut menjalankan Nginx dan memetakan port 8080 host ke port 80 container:

podman run -d --name web-latihan \
  -p 8080:80 docker.io/library/nginx:alpine

Uji dari mesin yang sama:

curl -I http://localhost:8080

Buka http://IP-SERVER:8080 dari browser jika firewall dan aturan jaringan mengizinkannya. Untuk port di bawah 1024, konfigurasi rootless dapat memiliki batasan; penggunaan port tinggi seperti 8080 biasanya lebih sederhana. Untuk produksi, letakkan reverse proxy di depan aplikasi jika perlu melayani HTTPS atau port publik 80/443.

Hentikan dan hapus container:

podman rm -f web-latihan

Langkah 5 — Kelola beberapa container dengan Pod

Podman dapat menempatkan beberapa container dalam satu pod. Container di pod berbagi network namespace, sehingga layanan dapat berkomunikasi melalui localhost sesuai konfigurasi aplikasinya.

Buat pod dengan port 8080:

podman pod create --name webstack -p 8080:80
podman run -d --pod webstack --name web \
  docker.io/library/nginx:alpine
podman pod ps

Periksa hasilnya di http://localhost:8080. Podman juga dapat menghasilkan berkas YAML yang kompatibel dengan alur kerja Kubernetes:

podman kube generate webstack > webstack.yaml

Periksa YAML sebelum menggunakannya kembali. Jangan menganggap berkas hasil generate sebagai konfigurasi produksi yang sudah siap tanpa validasi. Untuk membersihkan contoh:

podman pod rm -f webstack

Langkah 6 — Jalankan container sebagai layanan dengan Quadlet

Untuk layanan yang perlu dikelola systemd, Quadlet memungkinkan Anda mendefinisikan container melalui berkas konfigurasi. Ketersediaan dan lokasi komponen Quadlet bergantung pada versi Podman dan distribusi Linux yang digunakan.

Buat direktori konfigurasi pengguna:

mkdir -p ~/.config/containers/systemd
nano ~/.config/containers/systemd/webapp.container

Isi berkas dengan konfigurasi sederhana berikut:

[Unit]
Description=Nginx container managed by Quadlet

[Container]
Image=docker.io/library/nginx:alpine
ContainerName=webapp
PublishPort=8081:80

[Service]
Restart=always

[Install]
WantedBy=default.target

Muat ulang konfigurasi systemd pengguna dan mulai layanan:

systemctl --user daemon-reload
systemctl --user start webapp.service
systemctl --user status webapp.service --no-pager

Jika layanan harus tetap berjalan setelah logout dan saat boot, administrator dapat mengaktifkan lingering untuk akun tersebut:

sudo loginctl enable-linger "$USER"

Nama unit yang dihasilkan dan dukungan Quadlet dapat berbeda menurut versi. Jika webapp.service tidak ditemukan, periksa versi Podman, lokasi berkas Quadlet yang didukung distribusi, dan log systemd pengguna.

Praktik keamanan yang sebaiknya diterapkan

  • Hindari menjalankan container dengan sudo jika mode rootless sudah memenuhi kebutuhan.
  • Jangan memasukkan rahasia seperti password database langsung ke image atau repository. Gunakan mekanisme secret yang sesuai dan batasi izin berkas.
  • Gunakan image resmi atau sumber yang dapat dipercaya, dan pin versi atau digest untuk deployment yang membutuhkan hasil konsisten.
  • Publikasikan hanya port yang diperlukan. Port yang dipetakan ke semua interface dapat membuat layanan dapat diakses dari jaringan luar, tergantung firewall.
  • Atur batas CPU dan memori, pantau log, dan perbarui image serta host secara berkala.
  • Jangan menganggap Podman otomatis membuat aplikasi aman; keamanan tetap bergantung pada konfigurasi, hak akses, kernel, dan isi container.

Kesimpulan

Podman rootless merupakan pilihan menarik ketika prioritasnya adalah mengurangi kebutuhan hak root dan menjalankan container tanpa daemon pusat. Anda tetap dapat menjalankan image OCI, membuat pod, dan mengintegrasikan layanan dengan systemd melalui Quadlet. Docker tetap relevan untuk tim yang bergantung pada ekosistem Docker, Compose, atau tooling tertentu. Pilih berdasarkan kebutuhan operasional, lalu uji alur deployment dan pemulihan sebelum menerapkannya di produksi.

 

Post Terkait

Pengalaman Publish Aplikasi ke Google Play: Personal vs Organization, D-U-N-S, Tester dan Biaya

Membedah proses publikasi aplikasi ke Google Play: akun personal vs organization, D-U-N-S, 12 tester selama 14 hari, bia...

25 Sep 2026

Memilih Container Image: Alpine, Debian, Ubuntu atau Distroless?

Panduan memilih container image untuk Docker dan Podman. Bandingkan Alpine, Debian Slim, Ubuntu, Fedora, Rocky, UBI, Dis...

25 Sep 2026

Tutorial Podman Praktis: Untuk Programmer & DevOps

Tutorial Podman praktis untuk pekerjaan sehari-hari programmer dan DevOps: container, database, volume, network, debuggi...

25 Sep 2026

© 2026 Yowisben. Semua hak dilindungi.

Powered by LONTAR CMS v1.85.1