Базовая конфигурация MinIO 🔗
Отправной точкой для этого обзора стала простая стек Docker Compose: DuckDB для чтения и записи данных Iceberg, хранящихся на S3, предоставляемой MinIO.
Код можно найти здесь.
Docker Compose выглядит так:
-
DuckDB и Iceberg REST Catalog
-
MinIO (локальное S3 хранилище)
-
mc— CLI для MinIO, использующийся для автоматического создания bucket'а.
При вставке данных в DuckDB:
INSERT INTO cat.test.products VALUES
(1, 'Widget', 9.99),
(2, 'Gadget', 19.99),
(3, 'Doohickey', 14.99);
данные попадают в формат Iceberg на S3 в MinIO:
$ mc ls minio/warehouse/test/products/data/
[2026-01-12 14:35:55 UTC] 693B STANDARD 019bb2a2-8ad5-7159-968c-3693c3578902.parquet
[2026-01-12 14:35:55 UTC] 2.7KiB STANDARD 188ee032-8576-4f46-9834-1cac6d3080a3-m0.avro
[2026-01-12 14:35:55 UTC] 1.6KiB STANDARD snap-2633370813252912097-95ad4df0-3243-4cfb-a736-8f785aac100c.avro
В каждом из примеров можно запустить test.sh для проверки:
❯ ./test.sh
░▒▓██████████████████████████████████████████████████▓▒░
▒ ▒
▓ ___ ▓▓▓▓▓ ▓
█ ___( o)> ┌───────────┐ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒▒ █
█ \ <_. ) │ DUCKDB │ ▓░Local S3 ░▓ ▒▒▒▒ █
█ --- └───────────┘ ▓▓ MinIO ▒▒▒ █
▓ ┏━━━━━━━━━━━━━┓ ░░░ ▓
▒ ≋≋≋≋≋≋≋ ┃ ICEBERG ┃ ≋≋≋≋≋≋≋≋ Smoke test ▒
░ ≋≋≋≋≋≋≋ ┗━━━━━━━━━━━━━┛ ≋≋≋≋≋≋≋≋ ░
░▒▓██████████████████████████████████████████████████▓▒░
1. Checking MinIO buckets (before)...
[2026-01-14 12:48:41 UTC] 0B warehouse/
2. Creating Iceberg table and inserting data...
[…]
3. Verifying data in DuckDB...
[…]
┌───────┬───────────┬───────────────┐
│ id │ name │ price │
│ int32 │ varchar │ decimal(10,2) │
├───────┼───────────┼───────────────┤
│ 1 │ Widget │ 9.99 │
│ 2 │ Gadget │ 19.99 │
│ 3 │ Doohickey │ 14.99 │
└───────┴───────────┴───────────────┘
4. Checking MinIO bucket contents (after)...
[2026-01-14 12:49:07 UTC] 493B STANDARD data/019bbc8d-7d44-7b6b-af71-0ab99d3a0124.parquet
[2026-01-14 12:49:07 UTC] 2.7KiB STANDARD data/c37ab68c-8aaf-44a4-88e6-bc02a01daf5c-m0.avro
[2026-01-14 12:49:07 UTC] 1.6KiB STANDARD data/snap-1988745121468861337-95e77212-9571-423f-bb71-ce8f1b4282f0.avro
[2026-01-14 12:49:07 UTC] 1.0KiB STANDARD metadata/00000-8bf22118-d262-47a9-986c-721d2b99a846.metadata.json
[2026-01-14 12:49:07 UTC] 1.7KiB STANDARD metadata/00001-5cad6fc5-fe54-41bc-8131-4d6f900d20e7.metadata.json
Альтернативы MinIO 🔗
Рассмотрим различные альтернативы MinIO и насколько легко его на них заменить.
Исходный проект переписывался для использования замены MinIO с минимальными изменениями. MinIO CLI mc оставлен, поскольку его легко заменить (s3cmd, aws CLI и т.д.).
S3Proxy 🔗
Тестировалась версия: 3.0.0
-
✅ Docker образ (5M+ pulls)
-
✅ Лицензия: Apache 2.0
Простота конфигурации: 👍👍
Очень простая в реализации и выглядит как хороший лёгкий вариант.
| Заметили, что один из проектов, используемый S3Proxy — jclouds, был перемещён в Apache Attic (то есть снят с поддержки) в середине 2025 года. Вероятно, это не проблема, если использовать только локальное хранилище? |
RustFS 🔗
Тестировалась версия: 1.0.0-alpha.79
Простота конфигурации: ✅✅
-
✅ Docker образ (100k+ pulls)
-
✅ Лицензия: Apache 2.0
| Важно знать: недавно в RustFS найдена серьёзная уязвимость безопасности, которая многих отпугнула. Сайт выглядит красиво, но несколько ссылок ведут на одну страницу, давая ощущение свежепокрашенного нового проекта. Для демо это может быть менее критично, если легко переключаться. Также проект находится только на alpha-релизе. |
RustFS также включает GUI:
SeaweedFS 🔗
Тестировалась версия: 4.06
-
✅ Docker образ (5M+ pulls)
-
✅ Лицензия: Apache 2.0
Простота конфигурации: 👍
Этот quickstart полезен для запуска базовой функциональности S3. Впрочем, всё равно пришлось просить помощь у Claude для реализации. В целом изменений немного: просто замена Docker образа, но аутентификация требует собственного конфиг-файла (который, как и для Garage, встроен в Docker Compose для краткости).
Дополнение: сразу после публикации этого блога проект ответил, что уберут это требование, сделав использование ещё проще! Как здорово!
Это завершено в https://t.co/RQv387bbKb и будет включено в еженедельный релиз.
— SeaweedFS (@SeaweedFS) 14 января 2026
SeaweedFS поставляется с простым UI, что удобно:
Сайт SeaweedFS на удивление скудный, и с первого взгляда можно пропустить, что это проект Open Source, так как есть опция "pricing" и название на главной странице — "SeaweedFS Enterprise" (и нет ссылки на GitHub, которую я мог найти!). Но это действительно проект Open Source, и давно существующий: SeaweedFS с поддержкой S3 существует с релиза 0.91 в 2018 году. Подробнее о SeaweedFS можно узнать из этих слайдов, включая таблицу сравнения с MinIO.
Zenko CloudServer 🔗
Тестировалась версия: 9.2.8
-
✅ Docker образ (также устаревшие версии на Docker Hub с 5M+ pulls)
-
✅ Лицензия: Apache 2.0
Простота конфигурации: 👍
Раньше известный как S3 Server, CloudServer — часть набора инструментов Zenko, издаваемого Scality. Хорошо встраивается на место MinIO, но поначалу сложновато разобраться в наборе имён (cloudserver/zenko/scality) и какое ПО именно нужно запускать. Также есть странное ощущение, что доки ссылаются на устаревший Docker образ.
Garage 🔗
Простота конфигурации: 😵
Тестировалась версия: 1.0.0
-
✅ Docker образ (1M+ pulls)
-
✅ Лицензия: AGPL
Пришлось просить помощь у друга при работе с этим. Помимо контейнера garage, нужен был другой для начальной конфигурации, плюс TOML конфиг-файл, который встроен в Docker Compose для краткости.
Мог ли я сесть и разобраться с документацией самостоятельно? Да. Есть ли у меня дела поважнее? Тоже да.
Итак, Garage работает, но... это совсем не просто встраиваемая замена с точки зрения изменений кода. Требует другой сантехники для инициализации, и даже это не просто. Простой пример: The specified key ID is not a valid Garage key ID (starts with GK, followed by 12 hex-encoded bytes). Отлично для production-гигиены... избыточно для локальных демо и на самом деле порядком мешает.
| Это совсем честная оценка? С точки зрения новой технологии — нет. Много отличного ПО, особенно способного работать распределённо, имеет крутую кривую обучения для конфигурации. Но моё требование здесь — простая встраиваемая замена для MinIO, чем Garage не является. |
Apache Ozone 🔗
Тестировалась версия: 2.1.0
-
✅ Docker образы (1M+ pulls)
-
✅ Лицензия: Apache 2.0
Ozone выделилась из Apache Hadoop (помните его?) в 2020 году, начав как часть проекта HDFS ещё в 2015.
Простота конфигурации: 😵
Работает как замена MinIO, но это не лёгкий вариант; ни я, ни Claude не смогли развернуть её с менее чем **четырьмя** узлами. Чувствуется тяжёлой как Hadoop, и я не очень спешу её принимать для своего use case.
Ceph Object Gateway 🔗
Посмотрел на инструкции по установке и отказался!
Ozone (выше) достаточно тяжеловат; уверен, оба отличны в своём деле, но это не лёгкий контейнер для встраивания в Docker Compose для локальных демо.