Namngivna volymer kommer att lagras i dockers mapp (/var/lib/docker). Om du vill skapa en volym i en specifik värdmapp, använd en värdvolym med följande syntax:
docker run -v /home/ubuntu/data/app-data:/app-data my-image
Eller från din skrivfil:
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ärdvolymer kommer allt innehåll i volymen inuti bilden att läggas över det exakta innehållet i värdmappen, inklusive UID:n för värdmappen. En tom värdmapp initieras inte från bilden som en tom namngiven volym är. UID-mappningar tenderar att vara den svåraste delen av att använda en värdvolym.
Redigera:från kommentarerna nedan, om du behöver en namngiven volym som fungerar som en värdvolym, finns det ett lokalt beständig volym-plugin som är listat på dockers plugin-lista. Efter att ha installerat plugin-programmet kan du skapa volymer som pekar på värdmappar, med funktionen att även efter att du tagit bort den namngivna volymen blir värdkatalogen kvar. Exempelanvändning från pluginet inkluderar:
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 innehåller också en v2-skrivfil med följande volymexempel:
volumes:
data:
driver: local-persist
driver_opts:
mountpoint: /data/local-persist/data
Ett ytterligare alternativ som jag har blivit medveten om den senaste månaden är att använda monteringsalternativen för den lokala volymdrivrutinen för att manuellt skapa en bindningsmontering. Detta liknar en värdvolym i docker med följande skillnader:
- Om katalogen inte existerar kommer det att misslyckas att försöka starta en behållare med en namngiven volym som pekar på en bindningsmontering. Med värdvolymer kommer docker att initiera den till en tom katalog som ägs av root.
- Om katalogen är tom, kommer en namngiven volym att initiera bindningsmonteringen med innehållet i bilden på monteringsplatsen, inklusive fil- och katalogägande/behörigheter. Med en värdvolym finns det ingen initiering av värdkatalogens innehåll.
För att skapa en namngiven volym som bindningsfäste kan du skapa den i förväg med:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
Från en docker run
kommandot kan detta göras 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 skrivfil kan du skapa den namngivna volymen med:
volumes:
data:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
Jag föredrar att använda den namngivna volymen med den lokala drivrutinen istället för den lokala drivrutinen från tredje part om du behöver de namngivna volymfunktionerna.