MinIO:一個基於Apache License v2.0開源協議的對象存儲服務

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。這個目錄會在容器啓動時在容器的文件系統中建立,不過全部的數據都會在容器退出時丟失。java

    docker run -d -p 9000:9000 --name minio-service minio/minio server /data
  • 要建立具備永久存儲的MinIO容器,您須要將本地持久目錄從主機操做系統映射到虛擬配置~/.minio 並導出/data目錄。 爲此,請運行如下命令;docker

    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密鑰app

    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, 運行ide

docker ps -a 工具

-a flag 確保你獲取全部的容器(建立的,正在運行的,退出的),而後從輸出中識別Container ID測試

4.啓動和中止容器

啓動容器,你能夠使用 docker start 命令。ui

docker start <container_id> url

中止一下正在運行的容器, 使用 docker stop 命令。spa

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

相關文章
相關標籤/搜索