Довольно часто бывают случаи, когда при сборке у вас появляются файлы которые нет необходимости оставлять в образе, и их нужно исключить. Например:

  • Большинство пакетных менеджеров создают в системе кэш пакетов и служебных файлов.
    • APT хранит список пакетов в директории /var/lib/apt/lists/.
    • APT также хранит сами пакеты в директории /var/cache/apt/.
    • YUM может оставлять скачанные пакеты в директории /var/cache/yum/.../packages/.
  • Менеджеры пакетов, используемые разработчиками, такие как, ​npm (Node.js), Glide (Go), pip (Python), хранят файлы в директории кэша.
  • Компиляция приложений на C/C++ и т.п. языках оставляет объектные файлы и т.п.

Такого рода файлы:

  • не нужны в образе;
  • могут значительно увеличивать размер образа;
  • могут быть полезны при повторной сборке образа или других образов.

Если монтировать такого рода файлы в сборочный контейнер, то можно добиться не только уменьшения размера образа, но и ускорения процесса сборки. В Docker такой механизм реализуется с помощью функционала томов.

Для указания тома используется директива mount. Директории узла сборки монтируются в сборочный контейнер согласно директив from/fromPath и to описания томов. Для указания в качестве точки монтирования на сборочном узле любого файла или директории, вы можете использовать директиву fromPath. Либо, используя директиву from, вы можете указать одну из следующих служебных директорий:

  • tmp_dir временная директория, индивидуальная для каждого описанного образа, создаваемая заново при каждой сборке;
  • build_dir общая директория, доступная всем образам проекта и сохраняемая между сборками (находится по пути ~/.werf/shared_context/mounts/projects/<project name>/<mount id>/). Вы можете использовать эту директорию для хранения, например, кэша и т.п.

werf монтирует служебные директории с возможностью чтения и записи при каждой сборке, но в образе содержимого этих директорий не будет. Если вам необходимо сохранить какие-либо данные из этих директорий непосредственно в образе, то вы должны их скопировать при сборке

На стадии from, werf добавляет специальные лейблы к образу стадии, согласно описанных точек монтирования. Затем, на каждой стадии, werf использует эти лейблы при монтировании директорий в сборочный контейнер. Такая реализация позволяет наследовать точки монтирования от базового образа.

Также, нужно иметь в виду, что на стадии from werf очищает точки монтирования в базовом образе (т.е. эти папки будут пусты).