当前位置: 首页 > news >正文

使用 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_USERMINIO_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、执行效果

http://www.hskmm.com/?act=detail&tid=31149

相关文章:

  • 2025.10.14 正睿二十连测
  • singleton_pattern
  • ai出题
  • Python的Numpy、Pandas和Matplotlib(随笔)
  • 财务怎样做到业财融合 - 智慧园区
  • CF2146E
  • Spring Boot项目中集成Spring Security OAuth2和Apache Shiro
  • 【博客导航】
  • 部署向量数据库milvus
  • 从 0 到 1 实现高性能日志库 MiniSpdlog — 这可能是最适合新手的日志系统实战项目 !
  • 思想惰性:警惕时代中的精神惯性
  • journalctl 查看服务日志
  • 对ssh修改源码过程
  • 低代码时代,企业机遇在哪里
  • 2025 年浙江专升本培训学校推荐榜:浙江/台州/萧山/温州专升本机构,聚焦学历提升需求,杭州泓涵培训学校为学子护航
  • 25noip20d2t2 马戏表演 - Slayer
  • 从后端转行为AI工程师,转行AI大模型开发,附全套学习资源!收藏这份指南! - 实践
  • 实验一:现代C++初体验
  • 2025秋_11
  • 软件工程学习日志2025.10.14
  • CF1784E
  • nSwitch 存档自动备份系统模块 - autoSAVE
  • java基础7-字符串
  • 乐云具身活动体验
  • 【技术解决方案】联邦学习中遇到的Non-IID问题——隐语SecretFlow
  • 学习笔记:KTT
  • 题解:P10104 [GDKOI2023 提高组] 异或图
  • 2025 年筛网厂家推荐榜:聚焦场景适配与高效需求,锰钢筛网/聚氨酯筛网/合金焊接筛网/自清洁筛网/防堵筛网厂家滨州沃森网业成优选
  • P7076 [CSP-S2020] 动物园
  • 汽车价格战全面熄火了?不卷价格该卷什么? - 教程