Setelah membaca dokumen, saya merasa agak bingung tentang cara terbaik untuk mengelola data aplikasi/layanan yang produktif.
Tampaknya ada 3 opsi:
Cukup Petakan volume ke direktori host (mis . -v argumen untuk docker run)
Buat gambar kontainer docker 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 dari #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 dan/atau tingkat penyimpanan terpisah di server Anda
Saya pikir # 2 dan #3 hampir sama, perbedaan utamanya adalah tidak ada wadah berhenti dengan # 3 (secara harfiah, hanya volume bernama). Misalnya, Anda dapat membuat volume bernama dan melakukan hal yang sama dengan apa yang akan anda lakukan dengan # 2 -v sebagai gantinya.
Buat volume bernama:
$ docker volume create --name test
Pasang dan tulis beberapa data ke volume itu dari wadah:
$ docker run -v test:/opt/test alpine touch /opt/test/hello
Anda kemudian dapat me-mount yang sama test volume dalam wadah lain dan membaca data:
$ docker run -v test:/opt/test alpine ls -al /opt/test total 8drwxr-xr-x 2 root root 4096 Jan 23 22:28 .drwxr-xr-x 3 root root 4096 Jan 23 22:29 ..-rw-r--r-- 1 root root 0 Jan 23 22:28 hello
Keuntungannya di sini adalah volume tidak akan hilang secara tidak sengaja jika Anda menghapus wadah khusus data. Anda sekarang mengelolanya dengan docker volume sub-perintah.
$ d volume lsDRIVER VOLUME NAMElocal test
Ini juga membuka kemungkinan untuk driver volume di jalan sehingga Anda mungkin dapat melakukan volume bersama antar host (mis. bernama volume atas NFS). Contoh ini mungkin Flocker dan Konvoi. Ke titik Anda secara khusus tentang memindahkan atau mencadangkan data, Convoy memiliki sub-perintah khusus untuk mencadangkan data dan memungkinkan penyimpanan di NFS atau EBS di luar host Anda.
Untuk alasan ini, saya pikir cara yang lebih baru-sekolah (Docker 1.9+) adalah dengan menggunakan volume bernama daripada wadah data saja.
@ dukeofgaming belum lagi Anda dapat menjalankan btrfs scrub di atasnya untuk menemukan dan memperbaiki file yang rusak. Saya tidak yakin bagaimana hal-hal dockerized bekerja, tetapi saya kira itu tidak melindungi terhadap pembusukan data, jadi saya selalu membutuhkan pemulihan penuh jika sesuatu yang buruk terjadi, bukan hanya memulihkan file individual. Pemikiran lain bahwa itu menambahkan lapisan abstraksi lain, sehingga memperlambat pembacaan dan penulisan file lebih banyak lagi. Saya entah bagaimana tidak melihat keuntungan dari #2 dan #3, tetapi saya tidak berpengalaman dengan docker, jadi ini mungkin berubah.