Saya mencoba untuk lebih memahami pemahaman saya tentang volume Docker, dan saya mengalami kesulitan untuk mencari tahu perbedaan / kasus penggunaan:
- The
docker volume create
perintah - Itu
docker run -v /path:/host_path
- The
VOLUME
entri dalamDockerfile
berkas
Saya secara khusus tidak mengerti apa yang terjadi jika Anda menggabungkan VOLUME
entri dengan -v
bendera.
Jawaban:
Volume adalah data persisten yang disimpan di
/var/lib/docker/volumes/...
Anda bisa mendeklarasikannya di Dockerfile, yang berarti setiap kali container dimulai dari image, volumenya dibuat ( kosong ), bahkan jika Anda tidak memiliki
-v
opsi apa pun .Anda dapat mendeklarasikannya saat runtime
docker run -v [host-dir:]container-dir
.menggabungkan dua (
VOLUME
+docker run -v
) berarti Anda dapat memasang konten folder host ke volume Anda yang dipertahankan oleh kontainer di/var/lib/docker/volumes/...
volume buruh pelabuhan membuat membuat volume tanpa harus mendefinisikan Dockerfile dan membangun image dan menjalankan sebuah container. Ini digunakan untuk memungkinkan kontainer lain dengan cepat memasang volume tersebut.
Jika Anda telah mempertahankan beberapa konten dalam sebuah volume, tetapi sejak itu menghapus kontainer (yang secara default tidak menghapus volume yang terkait, kecuali Anda menggunakan docker rm -v), Anda dapat memasang kembali volume tersebut ke kontainer baru (mendeklarasikan volume yang sama).
Lihat " Docker - Bagaimana cara mengakses volume yang tidak terpasang ke wadah? ".
Dengan pembuatan volume buruh pelabuhan, ini mudah untuk memasang kembali volume bernama ke wadah.
sumber
Dockerfile
denganVOLUME
dan-v /path:/host_path/
bendera. KontenVOLUME
akan diganti dengan konten/host_path/
?docker volume create --name my_volume
diikuti oleh adocker run --volume-from my_volume
, bagaimana Anda tahu di mana mountpoint itu?docker run ...
, bagaimana saya bisa menulis ke dalam file yang disimpan padamy_volume
volume? Saya tidak tahu ... jalannya? dari volume di dalam container saya yang sedang berjalan karena saya tidak menentukan apa-apa? Saya harap saya cukup jelas, karena saya pasti tidak yakin dengan vokal saya: - /docker volume create --name aname
membuat volume bernama : Anda menetapkan jalur kontainer pada runtime::docker run -v aname:/apath
kontainer itu sekarang memiliki volume yang terpasang padanya, dipasang ke folder / apath-nya. Saya telah menulis ulang jawabannya untuk memperjelasnya.VOLUME
instruksi menjadi menarik ketika Anda menggabungkannya denganvolumes-from
parameter runtime.Diberikan Dockerfile berikut:
Bangun gambar dengan:
Dan putar wadah dengan:
Hal pertama yang harus diperhatikan adalah Anda akan memiliki folder bernama gambar ini
myvolume
. Tapi ini tidak terlalu menarik karena ketika kita keluar dari wadah, volumenya juga akan ikut hilang.Buat file kosong di folder ini, jadi jalankan perintah berikut di container:
Sekarang putar wadah baru, tetapi berbagi volume yang sama dengan
my-first-bb
:Anda akan melihat yang
my-second-bb
berisi filehello.txt
dimyvolume
folder.Setelah Anda keluar dari kedua wadah, volume Anda juga akan dihapus.
sumber
--rm
opsi. Saya pikir mungkin berhasil menyebutkannya. Jika Anda tidak memulai penampung dengan--rm
, Anda masih dapat menghapus penampung dan volume anonimnya dengandocker rm -v my-container
.