Volume bernama akan disimpan di dalam folder buruh pelabuhan (/var/lib/docker). Jika Anda ingin membuat volume di folder host tertentu, gunakan volume host dengan sintaks berikut:
docker run -v /home/ubuntu/data/app-data:/app-data my-image
Atau dari file penulisan Anda:
version: '2'
services:
mongo:
container_name: "CaseBook-db"
restart: always
image: mongo:3.2.7
ports:
- "27017"
volumes:
- /home/ubuntu/data/db:/data/db
labels:
- "ENVIRONMENT_TYPE=meteor"
app:
container_name: "CaseBook-app"
restart: always
image: "meteor/casebook"
build: .
depends_on:
- mongo
environment:
- MONGO_URL=mongodb://mongo:27017/CaseBook
ports:
- "80:3000"
volumes:
- /home/ubuntu/data/uploads:/Meteor-CaseBook-Container/.uploads
labels:
- "ENVIRONMENT_TYPE=meteor"
Dengan volume host, konten apa pun dari volume di dalam gambar akan dilapis dengan konten yang tepat dari folder host, termasuk UID folder host. Folder host kosong tidak diinisialisasi dari gambar seperti volume bernama kosong. Pemetaan UID cenderung menjadi bagian tersulit dalam menggunakan volume host.
Sunting:dari komentar di bawah, jika Anda memerlukan volume bernama yang bertindak sebagai volume Host, ada plugin volume persisten lokal yang terdaftar di daftar plugin buruh pelabuhan. Setelah menginstal plugin, Anda dapat membuat volume yang mengarah ke folder host, dengan fitur bahwa bahkan setelah menghapus volume bernama, direktori host tertinggal. Contoh penggunaan dari plugin meliputi:
docker volume create -d local-persist -o mountpoint=/data/images --name=images
docker run -d -v images:/path/to/images/on/one/ one
docker run -d -v images:/path/to/images/on/two/ two
Mereka juga menyertakan file penulisan v2 dengan contoh volume berikut:
volumes:
data:
driver: local-persist
driver_opts:
mountpoint: /data/local-persist/data
Satu opsi tambahan yang telah saya ketahui dalam sebulan terakhir adalah menggunakan opsi pemasangan driver volume lokal untuk membuat pengikatan secara manual. Ini mirip dengan volume host di buruh pelabuhan dengan perbedaan berikut:
- Jika direktori tidak ada, mencoba memulai wadah dengan volume bernama yang menunjuk ke pengikatan akan gagal. Dengan volume host, buruh pelabuhan akan menginisialisasi ke direktori kosong yang dimiliki oleh root.
- Jika direktori kosong, volume bernama akan menginisialisasi pengikatan dengan konten gambar di lokasi pemasangan, termasuk kepemilikan/izin file dan direktori. Dengan volume host, tidak ada inisialisasi konten direktori host.
Untuk membuat volume bernama sebagai bind mount, Anda dapat membuatnya terlebih dahulu dengan:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
Dari docker run
perintah, ini dapat dilakukan dengan --mount
:
docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
foo
Atau dalam file penulisan, Anda dapat membuat volume bernama dengan:
volumes:
data:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
Preferensi saya adalah menggunakan volume bernama dengan driver lokal daripada driver pihak ketiga yang bertahan lokal jika Anda memerlukan fitur volume bernama.