Halo, Kawan Belajar!
Salah satu tantangan utama saat menggunakan docker container adalah bagaimana menyimpan data secara persisten. Karena sifat docker container yang ephemeral (sementara), data yang disimpan langsung di dalam docker container akan hilang saat container dihapus atau dibuat ulang.
Di sinilah Docker Volume hadir sebagai solusi. Dengan Docker Volume, kita bisa menyimpan data secara aman, persisten, dan mudah diatur.
Pada artikel kali ini, kita akan membahas pengertian Docker Volume, cara kerjanya, perintah dasar untuk mengelolanya, hingga studi kasus real penggunaannya.
Simak sampai tuntas ya!
Apa Itu Docker Volume?
Docker Volume adalah mekanisme penyimpanan data yang dikelola oleh Docker untuk menyimpan file dan data secara persisten di luar container.
Ketika container dihapus atau dibuat ulang, data yang disimpan di volume tetap aman karena volumenya tidak ikut terhapus (kecuali dihapus manual).
Prinsip Penting Docker Volume
Persistent Storage
Data tetap tersimpan meskipun container dihentikan atau dihapus.Container Sharing
Satu volume bisa digunakan oleh beberapa container sekaligus.Decoupling
Volume dipisahkan dari lifecycle container. Artinya, container bisa diganti atau di-redeploy tanpa kehilangan data.Optimized for Docker
Volume dikelola langsung oleh Docker, lebih stabil dibandingkan hanya menggunakan bind mount ke host.
Cara Kerja Docker Volume
Secara sederhana, Docker Volume bekerja dengan memisahkan data dari lifecycle container. Artinya:
- Saat kamu membuat container baru, data aplikasi sebenarnya tidak benar-benar tersimpan di dalam container, melainkan di volume.
- Volume ini berada di lokasi penyimpanan khusus yang dikelola oleh Docker (biasanya di /var/lib/docker/volumes/ pada Linux).
- Container hanya akan mengakses volume tersebut seolah-olah itu bagian dari filesystem mereka.
Dengan cara ini, meskipun container dihapus, data tetap aman karena hidup di luar container. Container baru yang menggunakan volume sama akan tetap bisa mengakses data tersebut.
Volume vs Bind Mounts
Selain menggunakan Docker Volume, ada juga opsi lain yaitu Bind Mounts. Berikut tabel perbandingannya:
| Aspek | Docker Volume | Bind Mount |
|---|---|---|
| Rekomendasi | Metode utama dan direkomendasikan untuk menyimpan data container. | Sudah ada sejak awal Docker, tapi relatif kurang fleksibel dibanding volume. |
| Interaksi | Bisa dikelola menggunakan Docker CLI maupun API. | Tidak bisa diatur lewat CLI, hanya bisa diakses langsung dari host system. |
| Kemudahan Mounting | Cukup menggunakan nama volume saat mount ke container. | Harus menentukan path lengkap folder di host. |
| Lokasi Penyimpanan | Disimpan di path khusus Docker (/var/lib/docker/volumes/). |
Bisa berada di lokasi mana saja di host. |
| Use Case Utama | Cocok untuk persistent storage production karena lebih aman dan portable. | Cocok untuk development, misalnya sinkronisasi file antara host dan container. |
Singkatnya, bind mounts adalah metode untuk memasang (mounting) file atau folder dari host ke dalam container dengan menggunakan absolute path, yaitu alamat lengkap file atau folder di host. Sementara volume dikelola penuh oleh Docker dengan membuat direktori khusus di storage Docker, sehingga lebih aman dan portable.
Perintah Dasar Docker Volume
Setelah memahami konsep dasar Docker Volume, langkah berikutnya adalah mempelajari perintah-perintah dasar yang sering digunakan dalam pengelolaannya.
Dengan perintah ini, kamu bisa membuat volume baru, mengecek daftar volume yang ada, melihat detail informasi volume, hingga menghapus volume yang sudah tidak terpakai.
Bagian ini sangat penting, terutama bagi pemula, agar terbiasa berinteraksi dengan Docker melalui terminal dan memahami bagaimana data dapat disimpan secara persisten menggunakan volume.
a. Persyaratan Awal
Sebelum menjalankan perintah dasar Docker Volume, pastikan hal berikut sudah terpenuhi:
- Docker sudah terinstal dan berjalan di sistem kamu.
Catatan:
Jika kamu belum menginstal Docker, silakan baca panduan berikut:
👉 Cara Melakukan Instalasi Docker pada Sistem Operasi LinuxJika kamu membutuhkan VPS yang handal untuk mencoba maupun menjalankan Docker di lingkungan cloud, CloudKilat menyediakan layanan Kilat VM 2.0, baca fitur dan keunggulannya disini:
👉 Mengenal Fitur dan Keunggulan Layanan Kilat VM 2.0
- Memiliki hak akses pengguna (biasanya root atau user yang tergabung dalam grup docker).
b. Rangkuman Versi Aplikasi yang Digunakan
Dalam panduan ini, berikut detail versi dari sistem operasi dan aplikasi yang digunakan:
- Sistem Operasi: Ubuntu 24.04 LTS
- Docker Engine: 28.4.0
c. Macam-Macam Perintah Dasar Docker Volume
Berikut adalah perintah dasar yang sering digunakan dalam mengelola Docker Volume:
- Membuat Volume Baru
docker volume create nama_volume
Contoh Penggunaan:
Penjelasan:
Perintah diatas akan membuat volume baru dengan nama yang kamu tentukan misalnya my_data. Volume tersebut bisa digunakan oleh container untuk menyimpan data secara persisten.
- Melihat Daftar Volume yang Ada
docker volume ls
Contoh Penggunaan:
Penjelasan:
Perintah ini digunakan untuk menampilkan semua volume yang ada di sistem. Biasanya berguna untuk mengecek volume sebelum digunakan atau dihapus.
- Melihat Detail Informasi Volume
docker volume inspect <nama_volume>
Contoh Penggunaan:
Penjelasan:
Perintah ini menampilkan detail informasi dari sebuah volume, seperti lokasi di host, driver yang digunakan, dan container yang sedang memakai volume tersebut.
Bagian penting yang perlu diperhatikan:
- Mountpoint → ini path di host tempat data volume sebenarnya tersimpan, dalam contoh
/var/lib/docker/volumes/my_data/_data. - Driver → default-nya local, artinya volume dikelola oleh host Docker.
- Scope → biasanya local, artinya volume hanya bisa diakses di host tempat dibuat.
Jadi kalau nanti ada container yang pakai volume my_data, sebenarnya semua file-nya akan disimpan di folder _data tersebut. Kamu bisa cek langsung ke host (misalnya dengan ls -lah /var/lib/docker/volumes/my_data/_data) untuk melihat isi filenya.
- Menghapus Volume Tertentu
docker volume rm <nama_volume>
Contoh Penggunaan:
Penjelasan:
Digunakan untuk menghapus volume tertentu. Pastikan volume tidak sedang digunakan oleh container, kalau masih dipakai maka perintah ini akan gagal.
- Menghapus Semua Volume yang Tidak Digunakan
docker volume prune
Contoh Penggunaan:
Penjelasan:
Perintah ini akan menghapus semua volume yang sudah tidak digunakan oleh container manapun. Berguna untuk membersihkan storage agar tidak penuh oleh volume sisa.
- Menggunakan Volume Saat Menjalankan Container
docker run -d --name <nama_container> -v <nama_volume>:/path/di/container <nama_image>:<tag>
Contoh Penggunaan:
Penjelasan:
Perintah di atas akan menjalankan container Nginx dengan nama some-nginx dan menghubungkan volume bernama my_site ke dalam direktori /etc/nginx/conf.d di dalam container.
Saat volume my_site baru pertama kali dibuat, Docker akan otomatis menyalin file bawaan dari direktori /etc/nginx/conf.d/ di dalam container (termasuk default.conf) ke dalam volume.
Artinya, jika kamu cek isi volume di host pada path /var/lib/docker/volumes/my_site/_data maka akan terlihat file default.conf bawaan Nginx.
Dengan mekanisme ini, kamu bisa mengubah konfigurasi Nginx langsung dari host (misalnya edit default.conf di dalam volume), lalu cukup me-restart container untuk menerapkan perubahan, tanpa perlu rebuild image.
d. Studi Kasus: Menyimpan File Website Statis HTML Secara Persistent pada Docker Volume (Bonus)
Pada studi kasus pertama ini, kita akan menggunakan volume untuk menyimpan file HTML agar tidak hilang meski container NGINX dihapus.
- Buat Volume
docker volume create webdata
- Jalankan Container NGINX dengan Volume
docker run -d --name web1 \
-p 8080:80 \
--mount source=webdata,target=/usr/share/nginx/html \
nginx:latest
- Tambahkan File HTML
Tambahkan file index.html ke dalam volume (lokasi default di host: /var/lib/docker/volumes/webdata/_data/):
echo "<h1>Halo dari Docker Volume</h1>" > /var/lib/docker/volumes/webdata/_data/index.html
- Akses Website
Buka browser, dan akses website Anda pada http://<ip_vps>:8080 dan pastikan muncul teks Halo dari Docker Volume.
- Uji Persistent Data
Stop dan hapus container yang sudah dibuat sebelumnya:
docker stop web1
docker rm web1
Buat ulang container NGINX dengan volume yang sama:
docker run -d --name web2 \
-p 8080:80 \
--mount source=webdata,target=/usr/share/nginx/html \
nginx:latest
Buka browser, akses website kamu pada http://<ip_vps>:8000.
Hasilnya, file HTML yang sudah dibuat sebelumnya tetap ada dan tampil di browser, meskipun container lama sudah dihapus.
Penutup
Dari pembahasan di atas, kita bisa simpulkan bahwa Docker Volume adalah solusi terbaik untuk menyimpan data secara persisten di dalam ekosistem Docker. Dengan volume, kamu bisa:
- Menjaga data tetap aman meskipun container dihapus atau dibuat ulang.
- Berbagi data antar container dengan mudah.
- Memisahkan lifecycle data dari lifecycle container.
- Mendapatkan fleksibilitas lebih dibandingkan bind mount.
Melalui studi kasus Nginx dan file HTML sederhana tadi, terbukti bahwa data tetap tersimpan meskipun container dimatikan atau dihapus. Ini sangat penting, terutama jika kamu menggunakan Docker di production environment, misalnya untuk menyimpan konfigurasi, database, maupun file statis aplikasi.
Dengan memahami dan memanfaatkan Docker Volume, kamu akan lebih percaya diri dalam mengelola aplikasi berbasis container, tanpa khawatir kehilangan data.