MinIO Quickstart Guide--快速入门

  • MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
  • MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

Minio的安装[Docker]与使用

1.查询并下载镜像

docker search minio/minio

docker pull minio/minio [lastest] --最新版本

2.创建并启动容器--指定对应的AK 、Sk

  • Docker中运行MinIO单点模式:
    MinIO 需要一个持久卷来存储配置和应用数据。不过, 如果只是为了测试一下, 您可以通过简单地传递一个目录(在下面的示例中为/ data)启动MinIO。这个目录会在容器启动时在容器的文件系统中创建,不过所有的数据都会在容器退出时丢失。

      docker run -d -p 9000:9000 --name minio-service minio/minio server /data
  • 要创建具有永久存储的MinIO容器,您需要将本地持久目录从主机操作系统映射到虚拟配置~/.minio 并导出/data目录。 为此,请运行以下命令;

      docker run -p 9000:9000 --name minio-service -v /mnt/data:/data -v /mnt/config:/root/.minio  minio/minio  server /data
  • MinIO自定义Access和Secret密钥:要覆盖MinIO的自动生成的密钥,您可以将Access和Secret密钥设为环境变量。 MinIO允许常规字符串作为Access和Secret密钥

      docker run -d -p 9000:9000 --name minio-service -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio server /data
      

3.获取容器ID

在容器中使用Docker命令, 你需要知道这个容器的 容器ID 。 为了获取 Container ID, 运行

docker ps -a

-a flag 确保你获取所有的容器(创建的,正在运行的,退出的),然后从输出中识别Container ID

4.启动和停止容器

启动容器,你可以使用 docker start 命令。

docker start <container_id>

停止一下正在运行的容器, 使用 docker stop 命令。

docker stop <container_id>

5.MinIO容器日志

获取MinIO日志,使用 docker logs 命令。

docker logs <container_id>

6.监控MinioDocker容器

监控MinIO容器使用的资源,使用 docker stats 命令.

docker stats <container_id>`

基于java语言的客户端集成(实例)

1.引入对应的依赖

       <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>3.0.10</version>
        </dependency>

2.配置minio的相关配置[.yml]

minio:
  access-key: AKIAIOSFODNN7EXAMPLE
  secret-key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  bucket-name: test
  endpoint: http://127.0.0.1:9000

3.编写minio的工具类

@Component
@Slf4j
public class MinioClientUtils {

    @Value("${minio.access-key}")
    private String accessKey;

    @Value("${minio.secret-key}")
    private String secretKey;

    @Value("${minio.bucket-name}")
    private String bucketName;

    @Value("${minio.endpoint}")
    private String endpoint;

    private MinioClient minioClient;

    /**
     * 上传内容类型
     */
    private static final String CONTENT_TYPE = "application/octet-stream";

    @PostConstruct
    public void init() {
        log.info("---初始化minio客户端---");
        try {
            // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            minioClient = new MinioClient(endpoint, accessKey, secretKey);
        } catch (Exception e) {
            log.error("---初始化minio客户端异常,message={}---", e.getMessage());
        }
    }

    /**
     * 上传文件到minio
     *
     * @param fileName    保存文件名
     * @param inputStream 文件字节流
     */
    public ResponseResult putFileToMinio(String fileName, InputStream inputStream) {
        try {
            // 检查存储桶是否已经存在,不存在创建存储桶
            if (!minioClient.bucketExists(bucketName)) {
                minioClient.makeBucket(bucketName);
                //修改bucketName读写权限
                minioClient.setBucketPolicy(bucketName, "*", PolicyType.READ_WRITE);
            }
            // 使用putObject上传一个文件到存储桶中。
            minioClient.putObject(bucketName, fileName, inputStream, CONTENT_TYPE);
            //获取url
            String objectUrl = minioClient.getObjectUrl(bucketName, fileName);
            log.info("---成功上传文件到Minio,objectUrl={} ---", objectUrl);
            return ResponseResult.success(objectUrl);
        } catch (Exception e) {
            log.error("---上传文件到Minio异常,message={}---", e.getMessage());
            return ResponseResult.fail("上传文件到Minio异常");
        }
    }

}

4.测试结果实例

image.png


逐梦小生
222 声望249 粉丝