Navngivne volumener vil blive gemt i dockers mappe (/var/lib/docker). Hvis du vil oprette en diskenhed i en bestemt værtsmappe, skal du bruge en værtsdiskenhed med følgende syntaks:
docker run -v /home/ubuntu/data/app-data:/app-data my-image
Eller fra din skrivefil:
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"
Med værtsvolumener vil alt indhold af volumen inde i billedet blive overlejret med det nøjagtige indhold af værtsmappen, inklusive UID'er for værtsmappen. En tom værtsmappe initialiseres ikke fra billedet, som en tom navngivet diskenhed er. UID-tilknytninger plejer at være den sværeste del af at bruge en værtsvolumen.
Rediger:fra kommentarerne nedenfor, hvis du har brug for et navngivet volumen, der fungerer som en værtsvolumen, er der et lokalt persist volume plugin, der er opført på dockers plugin liste. Efter installation af pluginnet, kan du oprette volumener, der peger på værtsmapper, med den funktion, at selv efter at have fjernet den navngivne diskenhed, efterlades værtsmappen. Eksempel på brug fra pluginnet inkluderer:
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
De inkluderer også en v2-komponeringsfil med følgende volumeneksempel:
volumes:
data:
driver: local-persist
driver_opts:
mountpoint: /data/local-persist/data
En yderligere mulighed, som jeg er blevet gjort opmærksom på i den seneste måned, er at bruge den lokale volumendrivers monteringsmuligheder til manuelt at oprette en bind-mount. Dette ligner en værtsvolumen i docker med følgende forskelle:
- Hvis mappen ikke eksisterer, vil det mislykkes at prøve at starte en container med et navngivet volumen, der peger på et bind-mount. Med værtsvolumener vil docker initialisere den til en tom mappe, der ejes af root.
- Hvis mappen er tom, vil et navngivet volumen initialisere bind-mount med indholdet af billedet på monteringsstedet, inklusive fil- og mappeejerskab/tilladelser. Med en værtsvolumen er der ingen initialisering af værtsbibliotekets indhold.
For at oprette et navngivet volumen som et bind-mount, kan du oprette det på forhånd med:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
Fra en docker run
kommando, kan dette gøres med --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
Eller i en skrivefil kan du oprette det navngivne bind med:
volumes:
data:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
Min præference ville være at bruge den navngivne diskenhed med den lokale driver i stedet for den lokale driver fra tredjepart, hvis du har brug for de navngivne diskenhedsfunktioner.