Docker совет №13: Какой флаг лучше использовать Volume или Mount?
Jan 25, 2018 09:36 · 233 words · 2 minute read
Для проброса данных из каталога на хост-машине в docker-контейнер можно успешно использовать оба параметра.
Давайте разберемся в их особенностях и выясним, какой из вариантов лучше!
Если вы уже знакомы с docker, то уже не раз встречали (или использовали) такую конструкцию для запуска контейнера:
docker run ... -v "$(pwd)":/myapp
Здесь с помощью параметра -v
(--volume
) мы монтируем каталог с хост-машины (значение слева от двоеточия) в docker-контейнер (значение справа от двоеточия).
Аналогичную операцию можно проделать с помощью параметра --mount
, выглядеть это будет так:
docker run ... --mount type=bind,source="$(pwd)",target=/myapp
Согласитесь, второй вариант выглядит понятнее — сразу можно увидеть что и куда монтируется. Однако стоит отметить, что флаг --mount
доступен начиная с версии docker 17.06.
Раз оба параметра делают одно и то же, в чем же тогда отличие?
При запуске контейнера с параметром -v
если на хост-машине нет каталога, который нужно смонтировать внутрь docker-контейнера, то он будет создан. При старте контейнера с флагом --mount
вы увидите ошибку, если на хост-машине нет каталога, который монтируется в docker-контейнер.
Разработчики docker советуют использовать параметр --mount
— только потому, что он более наглядный. Я, пожалуй, соглашусь с ними — в случае запуска одного контейнера это наглядно, но в реальном мире обычно запускается несколько контейнеров, описанных в docker-compose.yml
.
На сегодняшний день, инструкции mount
в docker-compose.yml
пока нет, поэтому можно писать так:
...
volumes:
- type: "bind"
source: "."
target: "/myapp"
...
Или по-старинке, как делали до этого:
...
volumes:
- ".:/myapp"
...