Memahami Instruksi VOLUME Dockerfile

Volume Docker digunakan untuk menyimpan data persisten di luar container Anda. Mereka mengizinkan file konfigurasi, database, dan cache yang digunakan oleh aplikasi Anda untuk hidup lebih lama dari instance container individual.

Volume dapat dipasang saat Anda memulai wadah dengan docker run perintah -v bendera. Ini dapat mereferensikan volume bernama atau mengikat mount direktori Host ke dalam sistem file penampung.

Dimungkinkan juga untuk menentukan volume pada waktu pembuatan gambar dengan menggunakan VOLUME instruksi 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

File Docker VOLUME instruksi membuat titik pemasangan volume pada jalur wadah yang ditentukan. Volume akan dipasang dari sistem file host Docker Anda setiap kali wadah dimulai.

Dockerfile dalam contoh berikut mendefinisikan volume pada /opt/app/data jalur kontainer. Wadah baru akan secara otomatis memasang volume ke direktori.

FROM ubuntu:22.04
VOLUME /opt/app/data

Bangun gambar Anda sehingga Anda dapat menguji pemasangan volume:

$ docker build -t volumes-test:latest .

Ambil daftar volume yang ada sebagai referensi:

$ docker volume ls
DRIVER   VOLUME NAME
local    demo-volume

Sekarang mulai wadah menggunakan gambar pengujian Anda:

$ docker run -it volume-test:latest
root@07be7bde68c2:/#

Ulangi docker volume ls perintah untuk mengonfirmasi volume baru telah dibuat:

$ docker volume ls
DRIVER   VOLUME NAME
local    3198bf857fdcbb8758c5ec7049f2e31a40b79e329f756a68725d83e46976b7a8
local    demo-volume

Keluar dari cangkang wadah uji Anda sehingga wadah berhenti:

root@07be7bde68c2:/# exit
exit

Volume dan datanya akan terus bertahan:

$ docker volume ls
DRIVER   VOLUME NAME
local    3198bf857fdcbb8758c5ec7049f2e31a40b79e329f756a68725d83e46976b7a8
local    demo-volume

Anda dapat mendefinisikan beberapa volume dalam satu instruksi sebagai string yang dibatasi spasi atau array JSON. Kedua formulir berikut membuat dan memasang dua volume unik saat kontainer mulai:

VOLUME /opt/app/data /opt/app/config
# OR
VOLUME ["/opt/app/data", "/opt/app/config"]

Mengisi Konten Volume Awal

Volume secara otomatis diisi dengan konten yang ditempatkan ke direktori mount dengan langkah-langkah pembuatan gambar sebelumnya:

FROM ubuntu:22.04
COPY default-config.yaml /opt/app/config/default-config.yaml
VOLUME /opt/app/config

Dockerfile ini mendefinisikan volume yang akan diinisialisasi dengan yang ada default-config.yaml mengajukan. Wadah akan dapat membaca /opt/app/config/default-config.yaml tanpa harus memeriksa apakah file tersebut ada.

Perubahan pada konten volume dibuat setelah itu VOLUME instruksi akan dibuang. Dalam contoh ini, default-config.yaml file masih tersedia setelah kontainer dimulai karena rm perintah datang 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.yaml

Mengganti Instruksi VOLUME Saat Memulai Kontainer

Volume yang dibuat oleh VOLUME instruksi secara otomatis dinamai dengan hash unik yang panjang. Tidak mungkin mengubah namanya sehingga sulit untuk mengidentifikasi volume mana yang secara aktif digunakan oleh wadah Anda.

Anda dapat mencegah volume ini muncul dengan menentukan volume secara manual pada wadah Anda dengan docker run -v seperti biasanya. Perintah berikut secara eksplisit memasang volume bernama ke wadah /opt/app/config direktori, membuat Dockerfile’s VOLUME instruksi berlebihan.

$ docker run -it -v config:/opt/app/config volumes-test:latest

Kapan Anda Harus Menggunakan 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 VOLUME instruksi membuatnya lebih mudah untuk memulai wadah tanpa mengingat -v bendera untuk diterapkan.

VOLUME juga berfungsi sebagai dokumentasi jalur kontainer yang menyimpan data persisten. Menyertakan instruksi ini di Dockerfile Anda memungkinkan siapa pun untuk menentukan di mana container Anda menyimpan datanya, meskipun mereka tidak terbiasa dengan aplikasi Anda.

VOLUME Jebakan

VOLUME bukannya tanpa kekurangan. Masalah terbesarnya adalah bagaimana ia berinteraksi dengan pembuatan gambar. Menggunakan gambar dengan VOLUME instruksi sebagai gambar dasar build Anda akan berperilaku tidak terduga jika Anda mengubah konten dalam titik pemasangan volume.

Gotcha dari sebelumnya masih berlaku: efek dari perintah setelah VOLUME instruksi akan dibuang. Sebagai 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 dapat menjadi masalah dalam situasi lain juga. 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 tunggangan otomatis. Hal ini menyebabkan banyak volume redundan menumpuk di host jika kontainer yang menggunakan instruksi dijalankan secara teratur.

Ringkasan

file docker VOLUME instruksi 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 mengabaikan docker run perintah -v bendera.

Perilaku ini dapat berguna untuk gambar di mana ketekunan sangat penting atau banyak volume diperlukan. Namun VOLUME instruksi 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.

Leave a Comment