使用 Docker 快速搭建 MinIO 文件存储服务
在日常开发中,我们经常需要处理文件上传、下载、存储与访问的场景,比如图片、视频、日志文件、模型数据集等。传统的文件系统难以满足高并发、分布式部署以及云原生化的需求。而 MinIO 作为一款高性能、轻量级、兼容 Amazon S3 协议的对象存储服务,正是为此而生。
本文将带你从零开始,通过 Docker 部署 MinIO 服务,并结合 Java SDK 实现文件的上传与访问。
无论你是想在本地搭建一个轻量文件中心,还是为企业内部系统构建一个可扩展的对象存储方案,这篇文章都能帮你快速上手。
1 拉取 Minio 镜像
2025年2月,MinIO社区版以“精简控制台”为由删除11万行代码,彻底移除了Web管理功能。官方声明直白要求:“需要图形界面的用户请迁移至商业产品AiStor”。这一举动被社区视为对开源精神的背叛,引发开发者强烈抗议。
这个是最后的完美版本
docker pull minio/minio:RELEASE.2025-04-22T22-12-26Z
2 启动 Minio 容器
我们假设你希望访问端口为 9000(API)和 9001(Web 控制台),可以这样运行:
mkdir minio && cd minio
nano docker-compose.yml 写入
services:
minio:
image: minio/minio:RELEASE.2025-04-22T22-12-26Z
container_name: minio
ports:
- "9000:9000" # API 端口
- "9001:9001" # 控制台端口
volumes:
- ./data:/data
- ./config:/root/.minio
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: admin123456
MINIO_PROMETHEUS_AUTH_TYPE: "public"
command: server /data --console-address ":9001"
restart: always
01 参数说明
-p 9000:9000:MinIO API 服务端口-p 9001:9001:Web 控制台端口-v ./data:/data:映射数据目录-v ./config:/root/.minio:保存配置MINIO_ROOT_USER、MINIO_ROOT_PASSWORD:管理员账号密码server /data --console-address ":9001":指定数据目录并启用控制台端口
02 启动后访问
- 控制台地址:http://localhost:9001
- 登录账号:
admin - 登录密码:
admin123456
Prometheus 监控:设置 MINIO_PROMETHEUS_AUTH_TYPE="public" 后,你的 Prometheus 就可以直接抓取 /minio/v2/metrics/cluster 路径而不需要额外的鉴权。
完整的 Prometheus 抓取地址为:
http://localhost:9000/minio/v2/metrics/cluster
配置 Prometheus 抓取数据
你需要修改 Prometheus 的配置文件 prometheus.yml,添加一个抓取任务。
scrape_configs:
- job_name: 'minio-monitoring'
metrics_path: '/minio/v2/metrics/cluster'
static_configs:
- targets: ['<你的MinIO服务器IP>:9000']
-
注意:如果你是用 Docker Compose 把 Prometheus 和 MinIO 跑在同一个网络下,
targets可以直接写['minio:9000']。 -
因为是 Public:所以不需要配置
bearer_token。
在 Grafana 展示(最美观的方式)
虽然 Prometheus 能看数据,但展示效果很简陋。通常我们配合 Grafana 使用:
-
添加数据源:在 Grafana 中将你的 Prometheus 添加为 Data Source。
-
导入模板:MinIO 官方提供了非常完善的仪表盘模板。
-
点击 Grafana 左侧的 Dashboards -> Import。
-
输入 ID:
13502(这是官方最常用的集群仪表盘)。 -
选择你的 Prometheus 数据源,点击 Import。
-
进阶建议
除了 /minio/v2/metrics/cluster(集群整体指标),你也可以根据需要添加以下路径来获取更细粒度的监控:
-
节点指标:
/minio/v2/metrics/node(每个节点的 CPU、内存等)。 -
存储桶指标:
/minio/v2/metrics/bucket(每个 Bucket 的使用量、对象数)。
3 上传文件
在 MinIO(以及所有兼容 S3 的对象存储系统)中,桶(Bucket) 是最顶层的逻辑存储单元,可以理解为一个“命名空间”或“大文件夹”,它是所有对象(文件)的容器。
MinIO 不存在真正的目录结构,而是通过对象 key 的前缀来模拟目录层级。
例如,我们可以创建一个 bucket 叫 datasets ,数据集下面的文件对象如下:
datasets/
├── mydataset1/
│ ├── train/image1.jpg
│ └── train/image2.jpg
└── mydataset2/
├── data.csv
└── labels.txt
虽然看起来像目录树,但实际上存储系统中只有对象:
datasets/mydataset1/train/image1.jpg
datasets/mydataset1/train/image2.jpg
datasets/mydataset2/data.csv
datasets/mydataset2/labels.txt
MinIO 客户端(mc)或 SDK(Java/Python)在列举对象时,会自动把这些前缀识别为“目录”。
接下来,我们按照流程上传文件。
1、创建桶 datasets

2、创建新路径 mydataset1

3、上传图片

4 访问授权
1、修改桶的访问策略

图中,我们需要将访问策略从 Private 修改成 Public 。

2、访问图片
MinIO 地址:http://localhost:9000
桶名:datasets
对象路径:mydataset1/父与女.png
因为桶已经设置为 Public ,所以我们可以直接访问如下的链接即可:
http://localhost:9000/datasets/mydataset1/父与女.png
本文来自博客园,作者:木子欢儿,转载请注明原文链接:https://www.cnblogs.com/HGNET/p/19776020

浙公网安备 33010602011771号