Как добиться одновременной изоляции сборки и кэширования?

Я экспериментирую с такими инструментами, как Docker и nix, чтобы посмотреть, есть ли современное решение для создания ада зависимости от среды.

Docker не знает и не может кэшировать пакеты, загруженные в среде (обычно Linux), внутри контейнера; он кэширует промежуточные части сборки для каждой строки в вашем Dockerfile, но если ваша раздутая зависимость вытягивает половину ubuntu из apt, Docker будет загружать ее с нуля каждый раз, когда вы меняете что-либо над ней в нашем Dockerfile.

Похоже, что у Nix есть многообещающая инфраструктура для поддержания дерева зависимостей, а также совместного использования/кеширования зависимостей любого количества версии, но не обеспечивает изоляцию почти так же сильно; процессы по умолчанию по-прежнему смогут получить доступ ко всему вашему дереву; они созданы для того, чтобы проходить через дерево nix только для общих библиотек и тому подобного.

Есть ли какой-нибудь разумный способ объединить преимущества nix и Docker (или какого-либо другого существующего инструмента), чтобы кэширование двоичных файлов и инкапсуляция работали одновременно?

Некоторые идеи:

  • Docker + локальное зеркало ubuntu + btrfs для кэширования?
  • nix + chroot с флагом, чтобы сохранить общую базу данных nix?

Обратите внимание: меня интересует что-то, не зависящее от языка/экосистемы и имеющее хороший охват библиотек с открытым исходным кодом.


person Andrew Wagner    schedule 17.05.2016    source источник
comment
Обновление: я только что нашел coderwall.com/p/pcg_rg/   -  person Andrew Wagner    schedule 17.05.2016
comment
nix может делать сборки chroot. В NixOS есть nix-контейнеры, которые предоставляют (почти в той же степени) то, что вы, вероятно, ищете.   -  person Daniel Jour    schedule 01.06.2016
comment
Вы можете создавать изображения с помощью Nix для достижения нелинейного кэширования. Вам понадобится файловая система с дедупликацией для восстановления общего доступа, так что это не оптимально, но близко. См. stackoverflow.com /вопросы/43375880/   -  person Robert Hensing    schedule 13.04.2017
comment
@Robert, спасибо за ответ! Я не сделал многого в этом, кроме того, что получил больше опыта с nix, но я потерял пар, когда не смог заставить его работать для нескольких пользователей за разумное время.   -  person Andrew Wagner    schedule 14.04.2017