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. 测试结果实例