開発環境の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が移行しやすそうだなと思いました。同じような状況の方の参考になれば!