開発環境のMinIOをRustFSに移行した話
こんにちは!いわむらです。
開発環境でS3互換のオブジェクトストレージとしてMinIOを使っていたのですが、2025年10月にMinIOがDockerイメージの無料配布を停止したので、これを機に別のS3互換ストレージに移行してみました。
MinIOのDockerイメージ配布停止
2025年10月15日のセキュリティリリース以降、DockerHubやQuay.ioでの公式イメージ配布が停止され、ユーザー自身でソースからビルドする必要が生じました。しかも事前告知なしだったため、コミュニティで大きな反発がありました。
MinIOが無料のDockerイメージ配布を突然停止、コミュニティからは反発の声 - GIGAZINE
開発環境でサクッとdocker compose upするだけで使えていたのに、自前ビルドが必要になるのは面倒だなと思い、他のS3互換ストレージへの移行を検討しました。
移行先の検討
S3互換のオブジェクトストレージとして、以下の3つを候補に挙げて調べてみました。
SeaweedFS
Go製の分散ストレージ。大規模なファイルストレージ向けで高いスケーラビリティが特徴です。
Docker Composeでの導入自体は可能なのですが、Master/Volume/Filerという複数コンポーネントの構成が必要で、開発環境にはやや大げさかなという印象でした。
Garage
Rust製の分散オブジェクトストレージ。軽量な設計が特徴です。ただ、分散システム前提の設計でノードの設定が必要になり、開発環境で手軽に使うには少し手間がかかりそうでした。
RustFS
Rust製のシンプルなS3互換ストレージ。単一コンテナで動作し、Docker Composeでの導入が最も簡単そうでした。MinIOとほぼ同じ設定で動くため、移行も容易そうです。
比較表
| 項目 | SeaweedFS | Garage | RustFS |
|---|---|---|---|
| 言語 | Go | Rust | Rust |
| ライセンス | Apache-2.0 | AGPL-3.0 | Apache-2.0 |
| 構成 | 複数コンポーネント | 分散ノード | 単一コンテナ |
| 移行の容易さ | △ | △ | ◎ |
| 開発環境向け | △ | ○ | ◎ |
開発環境で手軽に使いたいので、今回はRustFSを選びました。
実際に移行してみた
移行作業はcompose.ymlを数行変更するだけでした。
Before(MinIO)
minio:
image: minio/minio:latest
environment:
MINIO_ROOT_USER: sample-user
MINIO_ROOT_PASSWORD: sample-password
entrypoint: minio
command: server /export --address :9000 --console-address :9001
volumes:
- ./docker/minio/data:/export
ports:
- "9000:9000"
- "9001:9001"
After(RustFS)
rustfs:
image: rustfs/rustfs:latest
environment:
RUSTFS_ACCESS_KEY: sample-user
RUSTFS_SECRET_KEY: sample-password
RUSTFS_CONSOLE_ENABLE: "true"
command: ["/data"]
volumes:
- ./docker/rustfs/data:/data
ports:
- "9000:9000"
- "9001:9001"
mc(MinIO Client)でバケットを作成する部分も、エンドポイントをminioからrustfsに変えるだけでOKでした。
アプリケーション側の設定変更は不要で、エンドポイントのコンテナ名を合わせるだけです。
AWS_ENDPOINT=http://rustfs:9000
移行後の所感
移行後、以下の操作を試してみましたが、すべて問題なく動作しました。
- ファイルのアップロード・ダウンロード
- 署名付きURL(Presigned URL)の生成
- Web Consoleでのバケット管理
mcコマンドでの操作
アプリケーション側のS3クライアント設定もエンドポイントを変えるだけで、コードの変更は不要でした。
Web Consoleも http://localhost:9001 でアクセスでき、MinIOと同じ感覚で使えます。
これでフレームワーク依存がなくなりました。
まとめ
MinIOのDockerイメージ無料配布停止をきっかけにRustFSへ移行しました。
- 移行は簡単:compose.ymlの数行変更のみ
- 問題なく動作:S3 API互換で既存コードそのまま
SeaweedFSやGarageも良いツールですが、開発環境でサクッと使いたいなら個人的にはRustFSが移行しやすそうだなと思いました。同じような状況の方の参考になれば!