一、MinIO简介
- MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来
- MinIO兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等
- S3 ( Simple Storage Service简单存储服务)
- 基本概念
- bucket - 类比于文件系统的目录
- Object - 类比文件系统的文件
- Keys - 类比文件名
- 基本概念
- 官方文档
- http://docs.minio.org.cn/docs/
二、MinIO特点
2.1、数据保护
- MinIO使用Minio Erasure Code(纠删码)来防止硬件故障;及时损坏一半以上的driver,但是仍然可以从中恢复
2.2、高性能
- 最为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GB/s的写速率
2.3、可扩容
- 不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心
2.4、SDK支持
- 基于Minio清凉的特点,它得到类似Java、Python或Go等语言的SDK支持
2.5、良好的操作页面
- 面向用户友好的简单操作界面,非常方便的管理Bucket及里面的文件资源
2.6、功能简单
- 这一设计原则让Minio不容器出错,更快启动
2.7、API丰富
- 支持文件资源的分享链接以及分享链接的过期策略、存储桶操作、文件列表访问及文件上传的基本下载功能等
2.8、文件变化主动通知
- 存储桶(Bucket)如果发生改变,比如上传对象和删除对象,可以使用存储桶事件通知机制进行监控,并通过以下方式发布出去:AMQP、MQTT、Elasticsearch、Redis、NATS、MySQL、Kafka、Webhooks
三、MinIO容器安装
关于Minio使用可以参考官方文档: http://docs.minio.org.cn/docs/
3.1、镜像拉取
docker pull minio
- 如果报错显示找不到
minio
安装软件的话,换一个仓库;或者直接去docker官网搜索并下载minio镜像然后拉取到虚拟机即可
3.2、创建容器
- 使用Docker进行环境部署和启动
-
docker run -i -d \\ -p 9000:9000 \\ -p 9001:9001 \\ --name minio-leadnews \\ --privileged=true \\ -v /etc/localtime:/etc/localtime \\ -v ~/minio/data:/data \\ -e \"MINIO_ROOT_USER=minio\" \\ -e \"MINIO_ROOT_PASSWORD=minio123\" \\ minio server /data --console-address \":9001\"
-
3.3、登录minio
-
安装好后,浏览器访问:http://宿主机IP:9001,输入账号密码即可登录
3.3、创建桶
-
点击右上角的
Create Bucket
可以创建桶
3.4、权限管理
-
桶创建好后,需要对该桶进行权限设置,否则外部无法访问,如下所示
3.5、新建路径
-
进入桶界面(点击
Browse
),创建新路径 -
如果所有文件都存储到shop下,不容易区分,我们可以根据不同文件,创建不同目录,例如
shop/items/
存储所有商品静态页,多级路径创建
3.6、上传图片
-
浏览器访问
四、MinIO快速入门
4.1、创建工程
-
创建minio-demo工程,对于pom如下所示
-
<?xml version=\"1.0\" encoding=\"UTF-8\"?> <project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"> <modelVersion>4.0.0</modelVersion> <groupId>com.coolman</groupId> <artifactId>minio-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!--minio依赖--> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.3.3</version> </dependency> <!--spring boot starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.6</version> </dependency> <!--spring boot test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.5.6</version> </dependency> </dependencies> </project
-
-
启动类
-
package com.coolman.minio; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MinioApplication { public static void main(String[] args) { SpringApplication.run(MinioApplication.class, args); } }
-
4.2、编写测试代码
-
package com.coolman.minio; import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.RemoveBucketArgs; import io.minio.RemoveObjectArgs; import io.minio.errors.*; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.io.FileInputStream; @SpringBootTest public class MinioTest { /** * 上传html测试 */ @Test public void testUpload() { // 1. 读取本地文件 try { FileInputStream fileInputStream = new FileInputStream(\"E:\\\\系统默认\\\\桌面\\\\news-init\\\\freemarker-demo\\\\src\\\\main\\\\resources\\\\testHtml\\\\HelloFreemarker.html\"); // 2. 创建minio客户端 MinioClient client = MinioClient.builder() .credentials(\"minio\", \"minio123\") // 登录凭证 .endpoint(\"http:/192.168.222.135:9000\") // minio链接地址 .build(); // 3. 上传 PutObjectArgs putObjectArgs = PutObjectArgs.builder() .object(\"/2022/07/28/test.html\") // 指定文件名称 .bucket(\"test\") // 桶名称 .contentType(\"text/html\") // 文件类型 // arg1:指定文件流,arg2:文件流的有效长度,arg3:partSize=-1表示自动识别文件长度 .stream(fileInputStream, fileInputStream.available(), -1) .build(); client.putObject(putObjectArgs); // 完成上传 } catch (Exception e) { e.printStackTrace(); } } /** * 删除html测试 */ @Test public void testDelete() { try { // 1. 创建minio客户端 MinioClient client = MinioClient.builder() .credentials(\"minio\", \"minio123\") // 登录凭证 .endpoint(\"http:/192.168.222.135:9000\") // minio链接地址 .build(); // 2. 删除 RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder() .object(\"/2022/07/28/test.html\") // 指定文件名称 .bucket(\"test\") // 桶名称 .build(); client.removeObject(removeObjectArgs); // 完成删除 } catch (Exception e) { e.printStackTrace(); } } }
4.3、运行效果
- 浏览器访问,效果如下所示
来源:https://www.cnblogs.com/OnlyOnYourself-lzw/p/16527118.html
本站部分图文来源于网络,如有侵权请联系删除。