Nazwane woluminy będą przechowywane w folderze Docker (/var/lib/docker). Jeśli chcesz utworzyć wolumin w określonym folderze hosta, użyj woluminu hosta o następującej składni:
docker run -v /home/ubuntu/data/app-data:/app-data my-image
Lub z pliku do tworzenia:
Wersjaversion: '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"
W przypadku woluminów hosta dowolna zawartość woluminu wewnątrz obrazu zostanie nałożona na dokładną zawartość folderu hosta, w tym identyfikatory UID folderu hosta. Pusty folder hosta nie jest inicjowany z obrazu tak, jak pusty nazwany wolumin. Mapowanie UID wydaje się być najtrudniejszą częścią korzystania z woluminu hosta.
Edycja:z poniższych komentarzy, jeśli potrzebujesz nazwanego woluminu, który działa jako wolumin hosta, istnieje wtyczka lokalnego woluminu utrwalania, która jest wymieniona na liście wtyczek platformy Docker. Po zainstalowaniu wtyczki możesz tworzyć woluminy wskazujące foldery hosta, z tą funkcją, że nawet po usunięciu nazwanego woluminu, katalog hosta pozostaje w tyle. Przykładowe użycie wtyczki obejmuje:
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
Zawierają również plik tworzenia v2 z następującym przykładem woluminu:
volumes:
data:
driver: local-persist
driver_opts:
mountpoint: /data/local-persist/data
Jedną z dodatkowych opcji, o której zostałem poinformowany w zeszłym miesiącu, jest użycie opcji montowania lokalnego sterownika woluminu, aby ręcznie utworzyć montowanie typu bind. Jest to podobne do woluminu hosta w oknie dokowanym z następującymi różnicami:
- Jeśli katalog nie istnieje, próba uruchomienia kontenera z nazwanym woluminem wskazującym na montowanie z wiązaniem zakończy się niepowodzeniem. W przypadku woluminów hosta docker zainicjuje go w pustym katalogu, którego właścicielem jest root.
- Jeśli katalog jest pusty, nazwany wolumin zainicjuje montowanie powiązania z zawartością obrazu w lokalizacji montowania, w tym właścicielem/uprawnieniami do pliku i katalogu. W przypadku woluminu hosta nie ma inicjalizacji zawartości katalogu hosta.
Aby utworzyć nazwany wolumin jako montowany powiązanie, możesz go wcześniej utworzyć za pomocą:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
Z docker run
polecenie, można to zrobić za pomocą --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
Lub w pliku redagowania możesz utworzyć nazwany wolumin za pomocą:
volumes:
data:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
Wolałbym używać nazwanego woluminu z lokalnym sterownikiem zamiast lokalnego sterownika innej firmy, jeśli potrzebujesz funkcji nazwanego woluminu.