Docker digunakan untuk menyimpan data persisten di luar wadah Anda. Mereka mengizinkan file konfigurasi, database, dan cache yang digunakan oleh aplikasi Anda untuk hidup lebih lama dari instance container individual.
Volumes dapat dipasang saat Anda memulai container dengan flag perintah-v perintah docker run. Ini dapat mereferensikan volume bernama atau mengikat mount direktori host ke filesystem penampung.
Ini juga memungkinkan untuk menentukan volume pada waktu pembuatan gambar dengan menggunakan instruksi VOLUME di Dockerfiles Anda. Mekanisme ini menjamin bahwa container yang dimulai dari image akan memiliki penyimpanan persisten yang tersedia. Dalam artikel ini Anda akan mempelajari cara menggunakan instruksi ini dan kasus penggunaan yang masuk akal.
Mendefinisikan Volume Di Dockerfiles
Instruksi Dockerfile VOLUME membuat titik pemasangan volume pada jalur kontainer yang ditentukan. Sebuah volume akan dipasang dari sistem file host Docker Anda setiap kali sebuah container dimulai.
Dockerfile dalam contoh berikut mendefinisikan volume di jalur container /opt/app/data. Wadah baru akan secara otomatis memasang volume ke direktori.
FROM ubuntu:22.04
VOLUME /opt/app/data
Build image Anda sehingga Anda dapat menguji volume mount:
$ docker build -t volumes-test:latest .
Mengambil daftar volume yang ada sebagai referensi:
$ docker volume ls
DRIVER VOLUME NAME
lokal demo-volume
Sekarang mulai wadah menggunakan gambar uji Anda:
$ docker run -it volume-test:latest root@07be7bde68c2:/#
Ulangi perintah docker volume ls untuk mengonfirmasi a volume baru telah dibuat:
$ docker volume ls
DRIVER VOLUME NAME
local 3198bf857fdcbb8758c5ec7049f2e31a40b79e329f756a68725d83e46976b7a8 local demo-volume
Keluar dari shell container uji Anda sehingga container keluarnya akan berhenti:
#68 $ docker volume ls
DRIVER NAMA VOLUME
lokal 3198bf857fdcbb8758c5ec7049f2e31a40b79e329f756a68725d83e46976b7a8 lokal demo-volume
Anda dapat menentukan beberapa volume dalam satu instruksi tion sebagai string yang dibatasi spasi atau array JSON. Kedua formulir berikut membuat dan memasang dua volume unik saat container mulai:
VOLUME /opt/app/data /opt/app/config
# ATAU VOLUME ["/opt/app/data", "/opt/app/config"]
Mengisi Konten Volume Awal
Volumes secara otomatis diisi dengan konten yang ditempatkan ke direktori mount dengan langkah-langkah pembuatan gambar sebelumnya:
FROM ubuntu:22.04 SALIN default-config.yaml /opt/app/config/default-config.yaml VOLUME /opt/app/config
Dockerfile ini mendefinisikan volume yang akan diinisialisasi dengan file default-config.yaml yang ada. Kontainer akan dapat membaca /opt/app/config/default-config.yaml tanpa harus memeriksa apakah file tersebut ada.
Perubahan pada konten volume yang dibuat setelah instruksi VOLUME akan dibuang. Dalam contoh ini, file default-config.yaml masih tersedia setelah container dimulai karena perintah rm muncul setelah /opt/app/config ditandai sebagai volume.
FROM ubuntu:22.04 COPY default-config.yaml /opt/app/ config/default-config.yaml VOLUME /opt/app/config RUN rm /opt/app/config/default-config.yamlMengganti Instruksi VOLUME Saat Memulai Container
Volumes yang dibuat oleh instruksi VOLUME secara otomatis diberi nama dengan hash unik yang panjang. Tidak mungkin untuk mengubah namanya sehingga sulit untuk mengidentifikasi volume mana yang secara aktif digunakan oleh container Anda.
Anda dapat mencegah volume ini muncul dengan mendefinisikan volume secara manual pada container Anda dengan docker run -v seperti biasa. Perintah berikut secara eksplisit memasang volume bernama ke direktori /opt/app/config container, membuat instruksi VOLUME Dockerfile menjadi redundant.
$ docker run -it -v config:/opt/app/config volumes-test:latestKapan Harus Anda Gunakan Instruksi VOLUME?
VOLUME instruksi dapat membantu dalam situasi di mana Anda ingin menegakkan bahwa ketekunan digunakan, seperti dalam gambar yang mengemas server database atau penyimpanan file. Menggunakan instruksi VOLUME mempermudah memulai container tanpa mengingat flag -v ke apply.
VOLUME juga berfungsi sebagai dokumentasi jalur container yang menyimpan data persisten. Menyertakan instruksi ini di Dockerfile Anda memungkinkan siapa saja untuk menentukan di mana container Anda menyimpan datanya, bahkan jika mereka tidak terbiasa dengan aplikasi Anda.
VOLUME Pitfalls
VOLUME bukannya tanpa kekurangannya. Masalah terbesarnya adalah bagaimana ia berinteraksi dengan pembuatan gambar. Menggunakan gambar dengan instruksi VOLUME sebagai gambar dasar build Anda akan berperilaku tidak terduga jika Anda mengubah konten dalam titik pemasangan volume.
Gotcha dari sebelumnya masih berlaku: efek perintah setelah instruksi VOLUME akan dibuang. Karena VOLUME akan berada di gambar dasar, semua yang ada di Dockerfile Anda muncul setelah instruksi dan Anda tidak dapat mengubah konten default direktori. Di balik layar, memulai wadah sementara untuk build akan membuat volume baru di host Anda yang dihancurkan di akhir build. Perubahan tidak akan disalin kembali ke gambar keluaran.
Pemasangan volume otomatis juga dapat menimbulkan masalah dalam situasi lain. Terkadang pengguna mungkin lebih suka memulai wadah sementara tanpa volume apa pun, mungkin untuk tujuan evaluasi atau debugging. VOLUME menghilangkan kemungkinan ini karena tidak mungkin untuk menonaktifkan pemasangan otomatis. Hal ini menyebabkan banyak volume redundan menumpuk di host jika container yang menggunakan instruksi dimulai secara teratur.
Kesimpulan
Dockerfile Instruksi VOLUME memungkinkan pemasangan volume ditentukan pada waktu pembuatan gambar. Mereka menjamin bahwa container yang dimulai dari image akan memiliki penyimpanan data persisten yang tersedia, bahkan jika pengguna menghilangkan flag -v flag.
dari perintah docker run.Perilaku ini dapat berguna untuk image yang memerlukan ketekunan atau banyak volume. Namun instruksi VOLUME juga mematahkan beberapa harapan pengguna dan memperkenalkan perilaku unik sehingga perlu ditulis dengan hati-hati. Menyediakan file Docker Compose yang secara otomatis membuat volume yang diperlukan seringkali merupakan solusi yang lebih baik.
Itulah berita seputar
Memahami Instruksi VOLUME Dockerfile, semoga bermanfaat.
Disadur dari HowToGeek.com.