Именуваните томове ще се съхраняват в папката на docker (/var/lib/docker). Ако искате да създадете том в конкретна хост папка, използвайте хост том със следния синтаксис:
docker run -v /home/ubuntu/data/app-data:/app-data my-image
Или от вашия файл за композиране:
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"
При томовете на хост всяко съдържание на тома в изображението ще бъде насложено с точното съдържание на хост папката, включително UID на хост папката. Празна хост папка не се инициализира от изображението, както е празен именуван том. UID съпоставянията обикновено са най-трудната част от използването на том на хост.
Редактиране:от коментарите по-долу, ако имате нужда от именуван том, който действа като хост том, има локален плъгин за постоянен обем, който е посочен в списъка с плъгини на docker. След като инсталирате приставката, можете да създавате томове, които сочат към хост папки, с функцията, че дори след премахване на именувания том, хост директорията остава зад себе си. Примерното използване от приставката включва:
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
Те също така включват файл за композиране v2 със следния пример за том:
volumes:
data:
driver: local-persist
driver_opts:
mountpoint: /data/local-persist/data
Една допълнителна опция, за която бях информиран през последния месец, е да използвам опциите за монтиране на драйвера за локален том, за да създам ръчно свързване. Това е подобно на хост обем в docker със следните разлики:
- Ако директорията не съществува, опитът за стартиране на контейнер с именуван том, сочещ към монтиране на обвързване, ще бъде неуспешен. С хост томове, docker ще го инициализира в празна директория, собственост на root.
- Ако директорията е празна, именуван том ще инициализира свързването на свързване със съдържанието на изображението на мястото за монтиране, включително собствеността/разрешенията на файл и директория. При том на хост няма инициализация на съдържанието на хост директорията.
За да създадете именуван том като свързващ монтиране, можете да го създадете предварително с:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
От docker run
команда, това може да стане с --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
Или във файл за композиране можете да създадете именувания том с:
volumes:
data:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
Моето предпочитание би било да използвам наименования том с локалния драйвер вместо локалния драйвер на трета страна, ако имате нужда от функциите на именувания обем.