偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用 Docker 快速搭建 MinIO 文件存儲服務(wù)

云計算 云原生
在日常開發(fā)中,我們經(jīng)常需要處理文件上傳、下載、存儲與訪問的場景,比如圖片、視頻、日志文件、模型數(shù)據(jù)集等。傳統(tǒng)的文件系統(tǒng)難以滿足高并發(fā)、分布式部署以及云原生化的需求,而?MinIO?作為一款高性能、輕量級、兼容 Amazon S3 協(xié)議的對象存儲服務(wù),正是為此而生。

在日常開發(fā)中,我們經(jīng)常需要處理文件上傳、下載、存儲與訪問的場景,比如圖片、視頻、日志文件、模型數(shù)據(jù)集等。傳統(tǒng)的文件系統(tǒng)難以滿足高并發(fā)、分布式部署以及云原生化的需求,而 MinIO 作為一款高性能、輕量級、兼容 Amazon S3 協(xié)議的對象存儲服務(wù),正是為此而生。

本文將帶你從零開始,通過 Docker 部署 MinIO 服務(wù),并結(jié)合 Java SDK 實(shí)現(xiàn)文件的上傳與訪問。

1.拉取 Minio 鏡像

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

圖片

2.啟動 Minio 容器

我們假設(shè)你希望訪問端口為 9000(API)和 9001(Web 控制臺),可以這樣運(yùn)行:

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"

1)參數(shù)說明

  • -p 9000:9000:MinIO API 服務(wù)端口
  • -p 9001:9001:Web 控制臺端口
  • -v /Users/zhangyong/docker/minio/data:/data:映射數(shù)據(jù)目錄
  • -v /Users/zhangyong/docker/minio/config:/root/.minio:保存配置
  • MINIO_ROOT_USER、MINIO_ROOT_PASSWORD:管理員賬號密碼
  • server /data --console-address ":9001":指定數(shù)據(jù)目錄并啟用控制臺端口

2)啟動后訪問

  • 控制臺地址:http://localhost:9001
  • 登錄賬號:admin
  • 登錄密碼:admin123456

圖片圖片

3.上傳文件

在 MinIO(以及所有兼容 S3 的對象存儲系統(tǒng))中,桶(Bucket) 是最頂層的邏輯存儲單元,可以理解為一個“命名空間”或“大文件夾”,它是所有對象(文件)的容器。

MinIO 不存在真正的目錄結(jié)構(gòu),而是通過對象 key 的前綴來模擬目錄層級。

例如,我們可以創(chuàng)建一個 bucket 叫 datasets ,數(shù)據(jù)集下面的文件對象如下:

datasets/
 ├── mydataset1/
 │    ├── train/image1.jpg
 │    └── train/image2.jpg
 └── mydataset2/
      ├── data.csv
      └── labels.txt

雖然看起來像目錄樹,但實(shí)際上存儲系統(tǒng)中只有對象:

datasets/mydataset1/train/image1.jpg
datasets/mydataset1/train/image2.jpg
datasets/mydataset2/data.csv
datasets/mydataset2/labels.txt

MinIO 客戶端(mc)或 SDK(Java/Python)在列舉對象時,會自動把這些前綴識別為“目錄”。

接下來,我們按照流程上傳文件。

1)創(chuàng)建桶  datasets

圖片圖片

2)創(chuàng)建新路徑 mydataset1

圖片圖片

3)上傳圖片

圖片圖片

4.訪問授權(quán)

1)修改桶的訪問策略

圖片

圖中,我們需要將訪問策略從 Private 修改成 Public 。

圖片圖片

2)訪問圖片

MinIO 地址:http://localhost:9000

桶名:datasets

對象路徑:mydataset1/父與女.png

因?yàn)橥耙呀?jīng)設(shè)置為 Public ,所以我們可以直接訪問如下的鏈接即可:

圖片圖片

5.Java 示例

1)創(chuàng)建 Access Key

圖片圖片

圖片圖片

2.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") // 可根據(jù)文件類型設(shè)置
                                .build()
                );
                System.out.println("? 文件上傳成功: " + objectName);
            }

            // 4. 拼接直鏈 URL(因?yàn)槭?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)執(zhí)行效果

圖片圖片

責(zé)任編輯:武曉燕 來源: 勇哥Java實(shí)戰(zhàn)
相關(guān)推薦

2024-10-16 09:49:18

2023-06-26 00:07:14

2015-01-05 14:16:16

DockerFig自動化容器編排

2009-09-27 14:58:47

Python HTTP

2020-10-11 21:00:31

開發(fā)存儲服務(wù)技術(shù)

2025-02-07 11:32:20

2023-08-29 07:34:43

Mimir微服務(wù)

2023-09-26 07:34:24

Docker部署依賴包

2017-02-14 19:57:27

docker云存儲Azure

2024-07-31 09:34:59

2022-10-09 07:21:21

wordpress數(shù)據(jù)庫mysql

2015-06-04 10:59:25

CephIaaSRGW

2012-02-16 10:00:59

2025-09-10 08:03:10

2023-09-26 15:50:21

2022-11-09 07:40:18

2015-05-27 10:29:41

DockerHadoopHadoop集群

2022-08-24 08:42:59

Minio存儲Golang

2018-09-17 10:47:28

MongoDB存儲Docker

2013-08-28 10:56:52

文件選取器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號