news 2026/6/12 13:04:42

使用 Docker 快速搭建 MinIO 文件存储服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Docker 快速搭建 MinIO 文件存储服务

在日常开发中,我们经常需要处理文件上传、下载、存储与访问的场景,比如图片、视频、日志文件、模型数据集等。传统的文件系统难以满足高并发、分布式部署以及云原生化的需求。而 MinIO 作为一款高性能、轻量级、兼容 Amazon S3 协议的对象存储服务,正是为此而生。

本文将带你从零开始,通过 Docker 部署 MinIO 服务,并结合 Java SDK 实现文件的上传与访问。

无论你是想在本地搭建一个轻量文件中心,还是为企业内部系统构建一个可扩展的对象存储方案,这篇文章都能帮你快速上手。

1 拉取 Minio 镜像

docker pull minio/minio:RELEASE.2025-04-22T22-12-26Z

2 启动 Minio 容器

我们假设你希望访问端口为 9000(API)和 9001(Web 控制台),可以这样运行:

docker run -d \

--name minio \

-p 9000:9000 \

-p 9001:9001 \

-v /Users/zhangyong/docker/minio/data:/data \

-v /Users/zhangyong/docker/minio/config:/root/.minio \

-e "MINIO_ROOT_USER=admin" \

-e "MINIO_ROOT_PASSWORD=admin123456" \

minio/minio:RELEASE.2025-04-22T22-12-26Z \

server /data --console-address ":9001"

01 参数说明

-p 9000:9000:MinIO API 服务端口

-p 9001:9001:Web 控制台端口

-v /Users/zhangyong/docker/minio/data:/data:映射数据目录

-v /Users/zhangyong/docker/minio/config:/root/.minio:保存配置

MINIO_ROOT_USER、MINIO_ROOT_PASSWORD:管理员账号密码

server /data --console-address ":9001":指定数据目录并启用控制台端口

02 启动后访问

控制台地址:http://localhost:9001

登录账号:admin

登录密码:admin123456

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 ,所以我们可以直接访问如下的链接即可:

5 Java 示例

01 创建 Access Key

02 Minio 上传示例

1、添加依赖

<dependency>

<groupId>io.minio</groupId>

<artifactId>minio</artifactId>

<version>8.5.10</version>

</dependency>

2、编写代码

public class MinioUnitTest {

public static void main(String[] args) {

try {

// 1. 初始化 MinIO 客户端

MinioClient minioClient = MinioClient.builder()

.endpoint("http://localhost:9000") // MinIO 地址

// accessKey 和 secretKey

.credentials("yHxFBiulXKsuhbg9nHqO", "qmsQU4JuWuwlr3ZgY4eMFbQ9LaTzzEHMV6T722kC")

.build();

// 2. 文件信息

String bucketName = "datasets";

String objectName = "mydataset1/images/xiaoyuanjiang.webp"; // 上传路径(类似目录)

String filePath = "/Users/zhangyong/Pictures/xiaoyuanjiang.webp"; // 本地文件路径

// 3. 上传文件(流式上传)

try (InputStream in = new FileInputStream(filePath)) {

minioClient.putObject(

PutObjectArgs.builder()

.bucket(bucketName)

.object(objectName)

.stream(in, in.available(), -1)

.contentType("image/png") // 可根据文件类型设置

.build()

);

System.out.println("✅ 文件上传成功: " + objectName);

}

// 4. 拼接直链 URL(因为是 public bucket)

String publicUrl = String.format("http://localhost:9000/%s/%s", bucketName, objectName);

System.out.println("✅ 上传成功,直链地址:");

System.out.println(publicUrl);

// // 4. 生成临时访问链接(可选)

// String url = minioClient.getPresignedObjectUrl(

// GetPresignedObjectUrlArgs.builder()

// .method(Method.GET)

// .bucket(bucketName)

// .object(objectName)

// .expiry(60 * 60) // 1小时有效

// .build()

// );

// System.out.println("📎 临时访问地址: " + url);

} catch (Exception e) {

e.printStackTrace();

}

}

}

3、执行效果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 0:04:12

SpringCloud负载均衡策略全解析

前言在当今分布式系统和微服务架构盛行的时代&#xff0c;如何高效地处理客户端请求&#xff0c;确保系统的高可用性、高性能和可扩展性&#xff0c;成为了开发人员面临的关键挑战。Spring Cloud 作为一套广泛应用的微服务框架&#xff0c;其中的客户端负载均衡机制扮演着至关重…

作者头像 李华
网站建设 2026/6/10 19:20:33

1分钟解锁30G空间!全网最简单安全的C盘清理方法 新手也放心用

电脑用久了&#xff0c;不少人都会遇到同一个烦恼&#xff1a;C 盘红色预警不断&#xff0c;存储空间告急&#xff0c;可看着满屏的系统文件&#xff0c;又怕一不小心删错东西导致电脑崩溃&#xff0c;只能眼睁睁看着电脑变慢、卡顿。其实&#xff0c;清理 C 盘根本不用 “畏首…

作者头像 李华
网站建设 2026/6/10 16:00:29

spring中el表达式安全和扩展

0. 背景 Spring的核心技术SpEL底层采用反射的方式获取对象属性、调用方法、创建对象等。如果不加以限制有非常大的安全漏洞。 如果访问权限过大,系统接收的字符串,很容易就执行恶意程序.比如在上一章 Spring使用el表达式 第一小节中执行的表达式T(Runtime).getRuntime().exec(…

作者头像 李华
网站建设 2026/6/10 16:56:29

四种高效的Obsidian标签体系构建,实战演示教程附模板

笔记的分类与标签的区别&#xff0c;标签应该怎么高效的使用&#xff1f;怎么合理的定义标签结构&#xff1f;结合四种案例构建自己的标签体系&#xff0c;结尾附带几套常用的标签结构。此方法不局限于Obsidian&#xff0c;同样适用于Notion&#xff0c;SiYuan等其他的笔记平台…

作者头像 李华
网站建设 2026/6/10 15:51:48

毕设分享 大数据分析:电商产品评论数据情感分析

文章目录1 简介数据分析目的数据预处理评论去重数据清洗分词、词性标注、去除停用词提取含名词的评论绘制词云词典匹配评论数据情感倾向分析修正情感倾向LinearSVC模型预测情感1 简介 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天向大家介绍一个大数据项目…

作者头像 李华
网站建设 2026/6/12 0:59:53

办公系统|基于Java+ vue办公管理系统(源码+数据库+文档)

办公管理 目录 基于springboot vue办公管理系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue办公管理系统 一、前言 博主介绍&am…

作者头像 李华