Короткий вывод — в вашей конфигурации лучше развернуть Garage в лёгком контейнере LXC (без Docker), а не в полноценной VM с Docker. Ниже — почему и на что обратить внимание.
Почему LXC (без Docker) предпочтительнее
- Меньше накладных расходов — контейнеры используют системное ядро прямо, меньше затрат памяти/CPU и более низкая латентность ввода‑вывода. Для S3‑хранилища это важно (throughput/IOPS).
- Прямой доступ к ZFS и к физическим дискам — можно просто монтировать ZFS‑датасет в контейнер, пользоваться преимуществами ZFS (snapshots, дедуп/компрессия, контроль задач), без слоёв виртуализации и сложной передачи данных в гостевую ОС.
- Проще получать консистентные ZFS‑snapshots и администрировать хранилище (бэкапы/ротация/проверки целостности).
- Меньше слоёв — проще отладки производительности и сети, проще резервирование и перенос.
Когда стоит выбрать VM с Docker
- Если нужна строгая изоляция (мультиарендность, недоверенные окружения) — VM безопаснее.
- Если у вас уже вся инфраструктура построена на Docker/ Kubernetes, есть удобные CI/CD пайплайны и вы нуждаетесь в переносимости Docker‑образов между хостами — VM+Docker даёт привычную среду.
- Если вы не хотите настраивать/поддерживать контейнеры LXC и предпочитаете полностью изолированное гостевое окружение.
Важные практические замечания (если выбираете LXC)
- Лучше выделить отдельный ZFS‑датасет для объектов Garage и пробинд‑монтировать его в контейнер (а не класть данные внутрь образа VM). Это даёт быстрые ZFS‑snapshots и управляемость.
- Для безопасности — использовать unprivileged LXC, если возможно. Работа с ZFS и unprivileged может требовать настройки прав/UID mapping (или запускать контейнер привилегированным в ограниченном окружении, если это приемлемо).
- Назначьте ресурсы (limits) LXC: memory, cpu, io (cgroups) — чтобы S3 не «съедал» всё.
- Настройте сетевой мост/статический IP, TLS, мониторинг (метрики IO/latency).
- Проверьте права доступа и пользователей/групп, под которыми работает Garage, чтобы записи на ZFS были корректны.
- Тестируйте нагрузку — контейнеры дают хорошую производительность, но реальная пропускная способность зависит от HDD конфигурации и ZFS параметров (recordsize, compression, ashift, кэш L2ARC/ARC).
Если всё-таки хочется Docker
- Лучше запускать Docker прямо на хосте (или в LXC с корректными cgroup/permission), а не в отдельной VM, чтобы не «терять» преимущества прямого доступа к ZFS. Docker в VM обычно вынуждает хранить данные в виртуальном диске поверх ZFS или передавать через сеть/NFS — это хуже по производительности и сложнее для ZFS‑управления.
- Учтите, что Docker с ZFS требует корректного storage driver/настроек; проще монтировать ZFS‑датасет как volume/bind mount.
Резюме
- Для одного выделенного S3‑узла на вашем железе: LXC без Docker — оптимальный баланс производительности и простоты эксплуатации, при условии корректной настройки доступа к ZFS и ограничений ресурсов.
- Если вам важнее строгая изоляция или у вас стандартизованное окружение на Docker/VM — выберите VM+Docker, но приготовьтесь к дополнительной сложности при работе с ZFS и возможным потерям в производительности.
Если хотите, могу:
- предложить конкретную схему развертывания LXC + ZFS (какие dataset’ы создать, права, примеры монтирования), либо
- расписать минимальную конфигурацию VM+Docker с передачей хранилища (если всё же решите пойти по этому пути).