Docker совет №13: Какой флаг лучше использовать Volume или Mount?

Jan 25, 2018 09:36 · 233 words · 2 minute read docker

Для проброса данных из каталога на хост-машине в 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"
...
tweet Share