MinIo快速入门

一、简介

Minio 是一个基于Apache License v2.0开源协议的对象存储服务,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。 例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。

官网地址:https://min.io/

在这里插入图片描述

二、Docker部署MinIo

2.1 拉取镜像

docker pull minio/minio

在这里插入图片描述

使用如下命令查看是否已经拉取到本地

docker images

在这里插入图片描述

2.2 创建目录

mkdir -p /software/minio/config  #用来存放配置
mkdir -p /software/minio/data    #用来存储上传文件

在这里插入图片描述

2.3 创建MinIo容器并运行

docker run \
	--name minio \
	-p 9000:9000  \
	-p 9090:9090  \
	-d \
	-e "MINIO_ROOT_USER=minio" \
	-e "MINIO_ROOT_PASSWORD=minio123" \
	-v /software/minio/data:/data \
	-v /software/minio/config:/root/.minio \
	minio/minio server  /data --console-address ":9090" --address ":9000"

在这里插入图片描述

2.4 创建网络并加入(可选)

# 创建网络
docker network create liming
# 查看网络
docker network ls
# 将minio容器加入到自己的网络
docker network connect liming minio

在这里插入图片描述

2.5 查看是否启动成功

docker ps

在这里插入图片描述

三、MinIO核心概念

下面介绍MinIO中的几个核心概念,这些概念在所有的对象存储服务中也都是通用的。

  • 对象(Object)

    对象是实际的数据单元,例如我们上传的一个图片。

  • 存储桶(Bucket)

    存储桶是用于组织对象的命名空间,类似于文件夹。每个存储桶可以包含多个对象。

  • 端点(Endpoint)

    端点是MinIO服务器的网络地址,用于访问存储桶和对象,例如http://192.168.10.101:9000

    注意: 9000为MinIO的API的默认端口,前边配置的9090以为管理页面端口。

  • Access Key 和 Secret Key

    • Access Key是用于标识和验证访问者身份的唯一标识符,相当于用户名。

    • Secret Key是与Access Key关联的密码,用于验证访问者的身份。

四、MinIO管理页面操作

4.1 登录

  • 访问:http://ip:9090 或者 http://ip:9000
  • 用户名:minio
  • 密码:minio123

在这里插入图片描述

4.2 创建存储桶

在这里插入图片描述

在这里插入图片描述

4.3 上传文件

在这里插入图片描述
在这里插入图片描述

4.4 访问文件

由于MinIO提供了HTTP访问功能,所以可以通过浏览器直接访问对象。对象URL为MinIO的Endpoint+对象的存储路径,例如下图中的图片对象的URL为http:ip:9000/test/20210624192032101.png

在这里插入图片描述

不出意外的话,使用浏览器访问上述URL,会得到如下响应,很显然是没有访问权限

在这里插入图片描述

若想继续访问图片,需要修改图片所在桶的访问权限,如下图所示

在这里插入图片描述

如上图所示,可选的访问权限共有三个选项,分别是PrivatePublicCustom,具体说明如下:

  • Private: 只允许桶的所有者对该桶进行读写。

  • Public: 允许所有人对该桶进行读写。

  • Custom: 自定义访问权限。

若想将权限设置为只允许所有者写,但允许所有人读,就需要自定义访问权限。自定义访问权限,需要使用一个规定格式的JSON字符串进行描述,具体格式可参考官方文档

例如以下JSON字符串表达的含义是:允许(Allow)所有人(*)读取(s3:GetObject)指定桶(test)的所有内容。

在这里插入图片描述

重新访问图片查看是否正常,图片正常显示

在这里插入图片描述

五、MinIO Java SDK

MinIO提供了多种语言的SDK供开发者使用,本文介绍Java SDK,下面通过一个简单案例熟悉一下其基本用法,具体内容可参考官方文档

在这里插入图片描述

  • 创建一个Maven项目(过程省略)

  • 引入如下依赖

    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>8.5.10</version>
    </dependency>
    
  • 编写如下内容

    package com.liming;
    
    import io.minio.*;
    import io.minio.errors.MinioException;
    
    import java.io.IOException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * Hello world!
     */
    public class App {
        public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException {
    
            try {
                //构造MinIO Client
                MinioClient minioClient = MinioClient.builder()
                        .endpoint("http://192.168.10.101:9000")
                        .credentials("minio", "minio123")
                        .build();
    
                //创建hello-minio桶
                boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("hello-minio").build());
                if (!found) {
                    //创建hello-minio桶
                    minioClient.makeBucket(MakeBucketArgs.builder().bucket("hello-minio").build());
                    //设置hello-minio桶的访问权限
                    String policy = """
                            {
                              "Statement" : [ {
                                "Action" : "s3:GetObject",
                                "Effect" : "Allow",
                                "Principal" : "*",
                                "Resource" : "arn:aws:s3:::hello-minio/*"
                              } ],
                              "Version" : "2012-10-17"
                            }""";
                    minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket("hello-minio").config(policy).build());
                } else {
                    System.out.println("Bucket 'hello-minio' already exists.");
                }
    
                //上传图片
                minioClient.uploadObject(
                        UploadObjectArgs.builder()
                                .bucket("hello-minio")
                                .object("1.jpeg")
                                .filename("C:\\Users\\lsx\\Pictures\\1.jpeg")
                                .build());
                System.out.println("上传成功");
            } catch (MinioException e) {
                System.out.println("Error occurred: " + e);
            }
        }
    }
    

    在这里插入图片描述

  • 查看图片

    在这里插入图片描述

相关推荐

  1. MinIO入门

    2024-07-19 14:04:03       57 阅读
  2. <span style='color:red;'>minio</span>

    minio

    2024-07-19 14:04:03      23 阅读
  3. Flask 快速入门

    2024-07-19 14:04:03       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 14:04:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 14:04:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 14:04:03       58 阅读
  4. Python语言-面向对象

    2024-07-19 14:04:03       69 阅读

热门阅读

  1. 升级TrinityCore 服务器硬件

    2024-07-19 14:04:03       20 阅读
  2. EasyExcel导入导出数据类型转换

    2024-07-19 14:04:03       20 阅读
  3. 第 4 课:Linux环境安装隐语Secretflow和Secretnote

    2024-07-19 14:04:03       19 阅读
  4. 音频播放:miniAudio 在QT框架使用, 数据源pcm

    2024-07-19 14:04:03       18 阅读
  5. Python常用的数据分析和可视化库

    2024-07-19 14:04:03       20 阅读
  6. C语言指针的理解

    2024-07-19 14:04:03       18 阅读
  7. Centos---命令详解 vi 系统服务 网络

    2024-07-19 14:04:03       21 阅读
  8. 基于深度学习的数据增强

    2024-07-19 14:04:03       21 阅读
  9. 【题解】StarryCoding P259 好奇怪好奇怪

    2024-07-19 14:04:03       21 阅读
  10. PHP 调用 JD 详情 API 接口:数据获取新途径

    2024-07-19 14:04:03       22 阅读
  11. 使用git提交代码时候出现403怎么解决

    2024-07-19 14:04:03       18 阅读
  12. tensorrt-llm知识

    2024-07-19 14:04:03       18 阅读
  13. 芯片基础 | `wire`类型引发的学习

    2024-07-19 14:04:03       19 阅读