MinIO存储在docker中安装及其使用方式

这篇文章主要介绍了MinIO存储在docker中安装及其使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MinIO存储在docker安装及使用

MinIO

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

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL

docker 安装Minio

安装docker镜像

# docker安装镜像 docker pull minio/minio 

容器运行方式① 和 容器运行方式② 选择一种就好。

运行容器方式①

# 后台运行容器 docker run -p 9000:9000 --name storage -di -v /storage/data:/data -v /storage/config:/root/.minio --restart=always minio/minio server /data 1,进入容器 docker exec -it storage sh 2,查看配置文件中的key值 cat /data/.minio.sys/config/config.json |grep Key “accessKey”: “507LX5P57F99DNEVF1GH”, “secretKey”: “Kc2tllnd9FQrgTzu0RSohir4B4svh2cLiueGZR5x”, “routingKey”: “”, 

运行容器方式②

# 后台运行容器方式 docker run -p 9000:9000 --name storage -di --restart=always \ -e "MINIO_ACCESS_KEY=superzheng" \ -e "MINIO_SECRET_KEY=storage/File" \ -v /storage/data:/data \ -v /storage/config:/root/.minio \ minio/minio server /data # -p 端口映射  将外部端口 映射到 容器内部端口 # --name 自定义容器名称 # -di 后台运行的方式运行 # --restart=always  一旦docker重启或者开启时,也自动启动镜像 # -e 设置系统变量  在这里是设置Minio的ACCESS_KEY和SECRET_KEY # -v 挂载文件  将系统文件  映射到  容器内部对应的文件夹 

这是安装成功的日志:

更多信息:请访问官网https://docs.min.io/cn/

java代码操作

package cn.mesmile.oss.minio; import cn.hutool.core.util.StrUtil; import cn.mesmile.oss.domain.FileInfoResp; import cn.mesmile.oss.exception.BucketNotExistException; import cn.mesmile.oss.exception.ContentTypeException; import cn.mesmile.oss.exception.FileSizeMaxException; import io.minio.MinioClient; import io.minio.Result; import io.minio.messages.DeleteError; import io.minio.policy.PolicyType; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; /** * @author zb * @date 2019/12/15 14:20 * @Description: * Copyright (C),2019,AOSSCI Inc.傲势科技有限公司 *   Endpoint	对象存储服务的URL *   Access key就像用户ID,可以唯一标识你的账户。 *   Secret key是你账户的密码。 */ @Component public class FileService { /** * 对象存储服务的URL, 注意 这里的endpoint填写 url会报错,这里endpoint的值应该为 【 http://ip:端口号 】 的形式 */ @Value("${minio.endpoint}") private  String endpoint; /** * 就像用户ID,可以唯一标识你的账户 */ @Value("${minio.access-key}") private  String accessKey; /** * 是你账户的密码 */ @Value("${minio.secret-key}") private  String secretKey; // 上传的最大限制 10 M private static final long MAX_SIZE =1024*1024*100; /** *  上传图片 * @param bucketName  桶名称 * @param file        文件 * @return * @throws Exception */ public FileInfoResp uploadImage(String bucketName, MultipartFile file) throws Exception{ String contentType = file.getContentType(); // image/png if (!StrUtil.containsAny(contentType,"image")) { throw new ContentTypeException("文件类型错误,请上传图片文件。"); } return uploadFile(bucketName,file,"image"); } /** * 上传文件 * @param bucketName 桶名 * @param file  文件 * @return * @throws Exception */ public FileInfoResp uploadFile(String bucketName, MultipartFile file) throws Exception { String contentType = file.getContentType(); return uploadFile(bucketName,file,contentType); } /** *  删除单个文件 * @param bucketName * @param objectName * @return * @throws Exception */ public Iterable> deleteFileSingle(String bucketName, String objectName) throws Exception { return deleteFile(bucketName,objectName,null); } /** *  批量删除文件 * @param bucketName  桶名 * @param objectNames 批量路径名称 * @return * @throws Exception */ public Iterable> deleteFileBath(String bucketName, Iterable objectNames) throws Exception { return deleteFile(bucketName,null,objectNames); } /** *  删除桶 * @param bucketName  桶名称 * @throws Exception */ public void deleteBucket(String bucketName) throws Exception { MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey); if (!minioClient.bucketExists(bucketName)) { throw new BucketNotExistException("桶不存在"); } minioClient.removeBucket(bucketName); } /** *  删除文件 * @param bucketName  桶的名称 * @param objectName  路径名例:  /image/123.jpg-600 * @param objectNames 批量路径名: * @return * @throws Exception */ private Iterable> deleteFile(String bucketName, String objectName,Iterable objectNames) throws Exception { MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey); if (!minioClient.bucketExists(bucketName)) { throw new BucketNotExistException("桶不存在"); } if (objectNames != null) { return minioClient.removeObject(bucketName, objectNames); } else { minioClient.removeObject(bucketName, objectName); return null; } } /** *  上传文件 * @param bucketName  桶的名称 * @param file   文件名 * @param prefix  前缀 * @return * @throws Exception */ private FileInfoResp uploadFile(String bucketName, MultipartFile file, String prefix) throws Exception { if (file.getSize() > MAX_SIZE ) { throw new FileSizeMaxException("文件过大,超过限制大小:"+MAX_SIZE/(1024*1024.0)+" M"); } MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey); minioClient.setBucketPolicy(bucketName,prefix, PolicyType.READ_WRITE); // 检查桶是否存在,若不存在则创建一个 if (!minioClient.bucketExists(bucketName)) { minioClient.makeBucket(bucketName); } InputStream inputStream = file.getInputStream(); String contentType = file.getContentType(); String filename = file.getOriginalFilename(); String objectName = prefix + "/" +filename; // 上传文件 minioClient.putObject(bucketName,objectName,inputStream,contentType); return FileInfoResp.builder() .bucketName(bucketName) .fileName(filename) .objectName(objectName) .contentType(contentType) .prefix(prefix) .url(endpoint + "/" + bucketName + "/" + objectName) .build(); } } 

Docker-compose安装部署MinIO存储服务

环境准备

拉取minio的docker镜像:docker pull minio/minio

创建挂载目录:

[root@test data]# mkdir /mnt/data [root@test data]# pwd /mnt/data [root@test data]# cd /home/app/minio/ [root@test minio]# ls docker-compose.yaml  minio.tar.gz 

编写docker-compose.yaml文件:

[root@test minio]# cat docker-compose.yaml version: '3' services: miniocheck: image: minio/minio:amd64 command: server /data --console-address ":9001" volumes: - /mnt/data:/data # 持久化地址 ports: - "9000:9000" # 绑定端口 - "9001:9001" container_name: minio restart: always environment: MINIO_ROOT_USER: admin # 账号 MINIO_ROOT_PASSWORD: gbase;123 #密码 

command指令中添加--console-address参数,否则浏览器访问控制台自动跳转端口导致无法访问,查看日志可看到如下信息:

[root@test minio]# docker-compose logs -f Attaching to minio minio         | API: http://172.24.0.2:9000  http://127.0.0.1:9000 minio         | minio         | Console: http://172.24.0.2:34327 http://127.0.0.1:34327 minio         | minio         | Documentation: https://docs.min.io minio         | minio         | WARNING: Console endpoint is listening on a dynamic port (34327), please use --console-address ":PORT" to choose a static port. minio         | Exiting on signal: TERMINATED 

启动容器并访问

启动容器,查看容器状态:

[root@test minio]# docker-compose up -d Creating network "minio_default" with the default driver Creating minio ... done [root@test minio]# docker ps -a CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS                             PORTS                                                                                                                                 NAMES a5464ecaac1b   minio/minio:amd64      "/usr/bin/docker-ent…"   5 seconds ago   Up 3 seconds                       0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp                                                                         minio 01f5e4eb4004   dperson/samba:latest   "/sbin/tini -- /usr/…"   3 days ago      Up 24 seconds (health: starting)   0.0.0.0:139->139/tcp, :::139->139/tcp, 0.0.0.0:137-138->137-138/udp, :::137-138->137-138/udp, 0.0.0.0:445->445/tcp, :::445->445/tcp   samba_samba_1 [root@test minio]# docker-compose logs -f Attaching to minio minio         | API: http://172.19.0.2:9000  http://127.0.0.1:9000 minio         | minio         | Console: http://172.19.0.2:9001 http://127.0.0.1:9001 minio         | minio         | Documentation: https://docs.min.io 

浏览器访问控制台:

输入docker-compose.yaml文件中自定义的账号密码:

至此,minio部署成功。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持0133技术站。

以上就是MinIO存储在docker中安装及其使用方式的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 站长技巧