Menyimpan data yang bertahan di luar siklus hidup container: named volume dengan podman volume create, bind mount lewat --mount type=bind, tmpfs untuk data sementara, perbandingan anonim, named, dan bind mount, volume drivers, serta fitur podman volume rename dari Podman 6.1.

Di episode 6 kalian mengelompokkan container ke dalam pods dan membuatnya berbagi network namespace. Tapi ada satu hal yang belum dibahas: data. Container bersifat sementara — begitu dihapus, sistem filenya ikut hilang. Episode 7 ini membahas cara menyimpan dan membagikan data dengan volumes dan mounts: named volume, bind mount, tmpfs, volume drivers, dan fitur rename volume yang hadir di Podman 6.1.
Container dirancang sebagai entitas sekali pakai. Ketika podman rm dijalankan, seluruh lapisan filesystem container turut terhapus. Masalah muncul saat data harus bertahan lebih lama dari container itu sendiri:
Volume menjawab semua ini dengan memisahkan data dari siklus hidup container. Data ditaruh di lokasi yang dikelola Podman, lalu di-mount ke dalam filesystem container.
Ada empat cara menghadirkan data ke container, masing-masing dengan karakteristik berbeda:
| Tipe | Penciptaan | Siklus hidup | Kasus penggunaan |
|---|---|---|---|
| Anonymous volume | Otomatis saat -v /data tanpa nama | Menempel pada container | Penyimpanan sementara |
| Named volume | podman volume create | Independen dari container | Data yang harus bertahan |
| Bind mount | Menunjuk path host | Ikut path host | Konfigurasi dan data host |
| tmpfs | In-memory, dipakai saat run | Hilang saat container berhenti | Cache dan data rahasia |
Perbedaan terpenting ada di siklus hidup. Named volume diciptakan eksplisit dan hidup lebih lama dari container; anonymous volume diciptakan diam-diam dan biasanya terbuang saat container dihapus; bind mount memakai file host secara langsung; tmpfs sama sekali tidak menyentuh disk.
Named volume adalah cara paling direkomendasikan untuk data persisten. Volume dikelola Podman sendiri, lokasi penyimpanannya diatur engine, dan kalian hanya berinteraksi lewat namanya:
podman volume create mydbdata
podman run -d --name db --volume mydbdata:/var/lib/mysql mariadb:latest
podman volume lspodman volume create mydbdata membuat volume bernama mydbdata, dan --volume mydbdata:/var/lib/mysql memasangnya ke direktori data MariaDB di dalam container. podman volume ls menampilkan daftar volume beserta drivernya.
Perintah pengelolaan volume yang sering dipakai:
| Perintah | Fungsi |
|---|---|
podman volume create | Membuat volume baru |
podman volume ls | Menampilkan daftar volume |
podman volume inspect | Menampilkan detail lokasi dan driver volume |
podman volume rm | Menghapus volume |
podman volume prune | Menghapus semua volume yang tidak dipakai |
podman volume inspect mydbdata
podman volume prunepodman volume inspect mydbdata menampilkan informasi seperti driver dan mountpoint di host. podman volume prune membersihkan volume yang tidak lagi dipakai container mana pun — jalankan dengan hati-hati karena data di dalamnya ikut hilang.
Bind mount menaruh direktori atau file dari host langsung ke dalam container. Data tidak dikelola Podman; container membaca dan menulis ke path host apa adanya. Cocok untuk menaruh file konfigurasi, kode sumber saat development, atau direktori log yang ingin diakses langsung:
podman run -d --name web \
--mount type=bind,src=/home/budi/app,dst=/usr/share/nginx/html \
nginx:latestSintaks --mount memakai pasangan key=value: type=bind menandakan bind mount, src menunjuk path sumber di host, dan dst menunjuk tujuan di dalam container. Bentuk pendeknya adalah flag -v, yang sudah tidak asing bagi pengguna Docker: -v /home/budi/app:/usr/share/nginx/html. Bentuk panjang --mount lebih eksplisit dan disarankan untuk skrip.
| Aspek | -v / --volume | --mount |
|---|---|---|
| Bentuk | src:dst:opsi ringkas | key=value eksplisit |
| Keterbacaan | Singkat, rentan salah baca | Jelas, mudah di-debug |
| Fitur tambahan | Opsi :ro, :Z | type, readonly, bind-propagation |
| Rekomendasi | Kepatuhan Docker | Skrip dan production |
podman run -v /data:/data dan --mount type=bind,src=/data,dst=/data pada dasarnya melakukan hal yang sama; bedanya pada kelengkapan kontrol. --mount juga menjadi cara untuk memakai jenis mount lain, termasuk tmpfs.
Untuk data yang benar-benar sementara — cache, file lock, atau secret dalam sesi singkat — tmpfs menyimpan semuanya di RAM, tidak pernah menyentuh disk, dan hilang otomatis saat container berhenti:
podman run -d --name cache --mount type=tmpfs,dst=/cache redis:latest--mount type=tmpfs,dst=/cache membuat filesystem sementara di /cache yang hanya hidup selama container berjalan. Tidak ada data yang tersisa di disk, menjadikannya pilihan tepat untuk cache Redis atau direktori kerja sementara. Perlu diingat bahwa tmpfs memakai memori container — ukuran harus disesuaikan dengan RAM yang tersedia.
Volume di Podman diciptakan lewat sebuah driver, mirip cara storage backend bekerja. Driver default bernama local, yang menyimpan data di mountpoint lokal host:
podman volume create --driver local backup-vol
podman volume inspect backup-volDriver local cukup untuk hampir semua kebutuhan harian. Ekosistem kontainer menyediakan driver tambahan untuk sinkronisasi ke remote atau cloud, dan volume yang memakai driver khusus tetap diperlakukan sama dari sisi CLI — kalian tidak perlu mengubah cara memakai --volume.
Important
Dengan driver local, mountpoint volume ada di dalam direktori storage Podman — bukan di sembarang path. Jangan menghapus direktori storage dengan podman system reset sebelum memastikan volume yang berisi data penting sudah di-backup atau di-export.
Sejak Podman 6.1, volume bisa di-rename setelah dibuat. Sebelumnya kalian harus membuat volume baru dan menyalin data secara manual — proses yang rawan kesalahan. Sekarang cukup satu perintah:
podman volume rename mydbdata dbdata-prod
podman volume lspodman volume rename mydbdata dbdata-prod mengubah nama volume beserta seluruh isinya tanpa memindahkan data. Ini sangat membantu saat penamaan standar baru diterapkan di tim — misalnya menambahkan suffix lingkungan — tanpa perlu melakukan migrasi data manual.
Volume juga menjadi jembatan data antar container. Dua container yang memasang volume yang sama akan melihat isi yang sama, baik keduanya berada dalam satu pod maupun container mandiri:
podman run -d --name writer --volume shared:/data alpine sleep 3600
podman run -d --name reader --volume shared:/data alpine sleep 3600Baik writer maupun reader menulis ke shared:/data — perubahan dari satu container langsung terlihat oleh yang lain. Pola ini dipakai untuk pipeline yang memproses file di satu container lalu dikonsumsi container lain, atau untuk aplikasi yang harus membaca log dari proses berdekatan.
Episode 7 membahas cara data disimpan dan dibagikan: perbedaan anonymous volume, named volume, bind mount, dan tmpfs; pembuatan named volume dengan podman volume create; bind mount lewat --mount type=bind dan bentuk pendek -v; tmpfs untuk data sementara di memori; volume drivers; fitur podman volume rename dari 6.1; serta pola berbagi volume antar container.
Inti yang harus dibawa pulang:
podman volume prune dan podman system reset adalah dua perintah yang bisa menghapus data — gunakan dengan kewaspadaan.Di episode 8 berikutnya, kalian akan menghubungkan container dan pod satu sama lain lewat networking: stack netavark dan aardvark-dns, DNS per-container, port mapping, sampai perbandingan tipe jaringan bridge, macvlan, ipvlan, dan host.