Setelah membaca dokumen saya agak bingung bagaimana cara terbaik mengelola data aplikasi / layanan produktif.
Tampaknya ada 3 opsi:
- Cukup memetakan volume ke direktori host (yaitu
-v
argumen untukdocker run
) - Buat gambar wadah buruh pelabuhan untuk data (yaitu wadah terpisah dan
--volumes-from
) - Membuat volume buruh pelabuhan (yaitu
docker volume create
)
Sekarang, tampaknya praktik yang diterima adalah opsi # 2, tetapi kemudian saya bertanya-tanya apa tujuan # 3.
Terutama bagaimana Anda menangani skenario ini dengan benar docker volume
dan apakah lebih baik menggunakan wadah volume data atau ini untuk setiap situasi?
- Anda memerlukan data aplikasi dalam volume yang terpisah dan / atau tingkat penyimpanan di server Anda
- Mencadangkan
- Memulihkan data
btrfs scrub
untuk menemukan dan memperbaiki file yang rusak. Saya tidak yakin bagaimana cara kerja barang-barang galerisasi, tetapi saya kira itu tidak melindungi terhadap pembusukan data, jadi saya selalu membutuhkan pemulihan penuh jika sesuatu yang buruk terjadi alih-alih hanya mengembalikan file individual. Pikiran lain yang menambahkan lapisan abstraksi, sehingga memperlambat membaca dan menulis file bahkan lebih. Saya entah bagaimana tidak melihat keuntungan dari # 2 dan # 3, tetapi saya tidak berpengalaman dengan buruh pelabuhan, jadi ini mungkin berubah.Jawaban:
Saya pikir # 2 dan # 3 adalah hal yang hampir sama, perbedaan utama adalah bahwa tidak ada wadah yang berhenti dengan # 3 (secara harfiah, hanya volume bernama). Misalnya, Anda dapat membuat volume bernama dan melakukan apa yang Anda lakukan dengan # 2
-v
sebagai gantinya.Buat volume bernama:
Pasang dan tulis beberapa data ke volume itu dari sebuah wadah:
Anda kemudian dapat memasang
test
volume yang sama di wadah lain dan membaca data:Keuntungannya di sini adalah bahwa volume tidak akan hilang secara tidak sengaja jika Anda menghapus wadah data saja. Anda sekarang mengelolanya dengan
docker volume
sub-perintah.Ini juga membuka kemungkinan untuk driver volume di jalan sehingga Anda mungkin dapat melakukan volume bersama antara host (mis. Volume bernama lebih dari NFS). Contohnya adalah Flocker dan Convoy . Untuk poin Anda secara khusus tentang memindahkan atau mencadangkan data, Konvoi memiliki sub-perintah khusus untuk membuat cadangan data dan memungkinkan untuk penyimpanan di NFS atau EBS eksternal ke host Anda.
Untuk alasan ini, saya pikir cara sekolah yang lebih baru (Docker 1.9+) adalah dengan menggunakan volume bernama daripada wadah data saja.
sumber
the volume won't accidentally disappear if you remove the data-only container
. Bisakah Anda menguraikan? Terima kasih.Pada Docker 1.9, membuat Volume Bernama dengan Volumes API (
docker volume create --name mydata
) lebih disukai daripada Kontainer Volume Data. Pada Februari 2016, dokumentasi volume Docker sudah ketinggalan zaman. Orang-orang di Docker sendiri menyarankan bahwa Wadah Volume Data " tidak lagi dianggap sebagai pola yang direkomendasikan ," " volume yang dinamai harus dapat menggantikan volume hanya data di sebagian besar (jika tidak semua) kasus ," dan " tidak ada alasan saya bisa melihat untuk menggunakan wadah khusus data . "sumber