The VOLUMEinstruksi menciptakan volume data dalam kontainer Docker Anda saat runtime. Direktori yang diberikan sebagai argumen ke VOLUMEadalah direktori yang melewati Sistem File Union , dan terutama digunakan untuk data persisten dan bersama.
Jika Anda menjalankan docker inspect <your-container>, Anda akan melihat di bawah Mountsbagian ada Sourceyang mewakili lokasi direktori pada host, dan Destinationyang mewakili lokasi direktori yang dipasang di wadah. Sebagai contoh,
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Berikut 3 kasus penggunaan untuk docker run -v:
docker run -v /data: Ini analog dengan menentukan VOLUMEinstruksi di Dockerfile Anda.
docker run -v $host_path:$container_path: Ini memungkinkan Anda untuk memasang $host_pathdari host Anda ke $container_pathdalam penampung Anda selama runtime. Dalam pengembangan, ini berguna untuk berbagi kode sumber di host Anda dengan penampung. Dalam produksi, ini dapat digunakan untuk memasang hal-hal seperti informasi DNS host (ditemukan di /etc/resolv.conf) atau rahasia ke dalam penampung. Sebaliknya, Anda juga dapat menggunakan teknik ini untuk menulis log penampung ke dalam folder tertentu di host. Keduanya $host_pathdan $container_pathharus jalur absolut.
docker run -v my_volume:$container_path: Ini membuat volume data dalam penampung Anda di $container_pathdan menamainya my_volume. Ini pada dasarnya sama dengan membuat dan menamai volume menggunakan docker volume create my_volume. Penamaan volume seperti ini berguna untuk volume data kontainer dan volume penyimpanan bersama menggunakan driver penyimpanan multi-host seperti Flocker .
Perhatikan bahwa pendekatan pemasangan folder host sebagai volume data tidak tersedia di Dockerfile. Mengutip dokumentasi buruh pelabuhan ,
Catatan: Ini tidak tersedia dari Dockerfile karena portabilitas dan tujuan berbagi. Karena direktori host, pada dasarnya, bergantung pada host, direktori host yang ditentukan dalam Dockerfile mungkin tidak akan berfungsi pada semua host.
Sekarang jika Anda ingin menyalin file Anda ke kontainer di lingkungan non-pengembangan, Anda dapat menggunakan ADDatau COPYinstruksi di Dockerfile Anda. Ini adalah apa yang biasanya saya gunakan untuk penerapan non-pengembangan.
COPYuntukADD. Mereka hampir sama, tetapiADDmemiliki beberapa kemampuan ekstra untuk menulis URL dan file arsip yang dapat mengejutkan.