Di Mac yang menggunakan Docker Desktop, buat cadangan Compose named volume dengan memasangnya (mount) ke kontainer sementara dan menulis arsip tar ke folder di Mac Anda. Periksa nama volume, hentikan layanan yang menulis ke volume tersebut, buat arsipnya, dan pastikan file tersebut ada sebelum menghapus kontainer. Perintah docker compose down biasa tetap mempertahankan named volume; docker compose down --volumes menghapus volume proyek yang memenuhi syarat, jadi jangan jalankan perintah tersebut sampai pencadangan selesai.

1. Identifikasi volume Compose dan path pemasangannya (mount path)

Di Terminal, buka direktori yang berisi file Compose proyek. Temukan pemasangan layanan (service mount), seperti db-data:/var/lib/postgresql/data, dan deklarasi tingkat atas (top-level) yang cocok di bawah volumes:. Sisi kiri, db-data, adalah kunci Compose; path kontainer setelah tanda titik dua adalah lokasi aplikasi membaca data tersebut. Compose dapat membuat volume Docker sebenarnya dengan awalan (prefix) nama proyek, sedangkan name: yang dikonfigurasi dapat memberinya nama kustom. Referensi volume Compose Docker menjelaskan aturan penamaan tersebut.

Buat daftar volume yang digunakan oleh proyek Compose saat ini:

docker compose volumes

Gunakan output tersebut dan file Compose untuk mengidentifikasi volume Docker yang tepat. Jika proyek menggunakan beberapa file Compose, profil, atau nama proyek kustom, gunakan opsi yang sama saat memeriksanya seperti saat stack pertama kali dijalankan. Jangan menebak nama volume sebenarnya hanya dari kunci YAML saja. docker volume ls dapat menampilkan semua volume Docker, tetapi mungkin mencakup proyek lain yang tidak terkait.

2. Hentikan penulisan data sebelum membuat arsip

Arsip sistem file belum tentu merupakan cadangan basis data yang konsisten jika data sedang mengalami perubahan saat file disalin. Pertama, hentikan aplikasi dengan benar (clean stop); untuk stack Compose, docker compose stop akan menghentikan layanannya sambil tetap mempertahankan kontainer dan volume. Jika basis data memiliki prosedur dump atau pencadangan khusus aplikasi, gunakan prosedur tersebut saat konsistensi tingkat transaksi diperlukan, lalu buat juga arsip volume jika Anda memerlukan salinan tingkat file.

Hindari docker compose down --volumes pada tahap ini. Dokumentasi Compose menyatakan bahwa down secara default menghapus kontainer dan jaringan proyek, sedangkan --volumes juga menghapus named volume dan anonymous volume yang memenuhi syarat. Volume eksternal tidak dihapus oleh down. Referensi compose down Docker menjelaskan perbedaannya.

3. Buat cadangan tar di folder Mac

Contoh berikut mengasumsikan nama volume Docker yang sebenarnya adalah myproject_db-data. Ganti nilai tersebut dengan nama persis yang telah Anda identifikasi. Perintah ini menyimpan db-data-backup.tar di direktori Mac saat ini. Docker Desktop menjalankan Docker Engine di dalam VM Linux, sehingga data named volume dikelola oleh Docker; metode ini menyalinnya melalui kontainer sementara alih-alih mengandalkan path penyimpanan VM Linux. Panduan volume Docker mendokumentasikan pendekatan kontainer pembantu (helper-container) dan tar ini, dan dokumentasi pengaturan Mac Docker Desktop menjelaskan tentang VM Linux dan berbagi file host (host file sharing).

volume_name='myproject_db-data'
backup_dir="$PWD"
backup_file='db-data-backup.tar'

docker run --rm \
  --mount "type=volume,source=$volume_name,target=/source,readonly" \
  --mount "type=bind,source=$backup_dir,target=/backup" \
  alpine sh -c 'tar -C /source -cf "/backup/'"$backup_file"'" .'

Arsip akan ditulis ke direktori yang direpresentasikan oleh $PWD, jadi pilihlah lokasi dengan ruang kosong yang cukup sebelum menjalankan perintah. Volume dipasang secara read-only di dalam kontainer pembantu untuk mencegah perubahan yang tidak disengaja selama penyalinan; langkah ini sendiri tidak menghentikan kontainer lain untuk menulis, itulah mengapa menghentikan proses penulisan terlebih dahulu sangatlah penting. Perintah ini memerlukan Docker Desktop yang sedang berjalan dan folder Mac yang dapat diakses untuk bind mount. Jika pemasangan gagal, periksa akses berbagi file (file-sharing access) Docker Desktop untuk folder tersebut.

Periksa apakah arsip tersebut ada dan memiliki ukuran wajar yang bukan nol:

ls -lh "$backup_file"

Ini memastikan bahwa sebuah file telah dibuat, bukan berarti isinya merupakan cadangan aplikasi yang dapat dipulihkan secara sempurna. Simpan arsip di suatu tempat di luar volume yang dikelola Docker, dan pertimbangkan untuk menyalinnya ke tujuan pencadangan reguler Anda sebelum menghapus data.

4. Hapus kontainer hanya setelah memverifikasi target Anda

Jika arsip sudah siap di tempatnya, hapus kontainer proyek dengan:

docker compose down

Perintah ini secara default akan membiarkan named volume tetap ada. Jika tujuan Anda adalah untuk menghapus volume tersebut juga, verifikasi kembali nama proyek dan volume terlebih dahulu, kemudian gunakan docker compose down --volumes hanya jika Anda benar-benar siap menghapus data tersebut. Volume bernama kustom atau volume eksternal dapat memiliki perilaku siklus hidup yang berbeda; periksa definisi Compose dan referensi perintah Docker daripada mengasumsikan bahwa opsi tersebut berdampak pada setiap volume.

Pertimbangan pemulihan (restore)

Alur kerja volume yang didokumentasikan Docker memulihkan arsip tar dengan memasang volume tujuan dan mengekstrak arsip ke dalamnya. Untuk file basis data, lakukan pemulihan ke volume baru atau volume yang sengaja dikosongkan saat layanan basis data dihentikan, dan ikuti persyaratan kepemilikan (ownership) serta inisialisasi image basis data tersebut. Jangan mengekstrak di atas volume yang berisi data yang masih Anda butuhkan: file yang ada dapat mengalami benturan dengan arsip, dan ekstraksi tar bukanlah strategi penggabungan (merge) yang aman. Jika Anda memerlukan titik pemulihan yang konsisten dengan basis data, gunakan proses pencadangan dan pemulihan milik basis data itu sendiri, baik sebagai tambahan atau sebagai pengganti arsip file mentah.

Sumber