文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MinIO存储在docker中安装及使用的方法是什么

2023-07-05 20:54

关注

本篇内容主要讲解“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 /data1,进入容器docker exec -it storage sh2,查看配置文件中的key值cat /data/.minio.sys/config/config.json |grep Key“accessKey”: “507LX5P57F99DNEVF1GH”,“secretKey”: “Kc2tllnd9FQrgTzu0RSohir4B4svh3cLiueGZR5x”,“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 挂载文件  将系统文件  映射到  容器内部对应的文件夹

这是安装成功的日志:

MinIO存储在docker中安装及使用的方法是什么

更多信息:请访问官网 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;@Componentpublic class FileService {        @Value("${minio.endpoint}")    private  String endpoint;        @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;        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");    }        public FileInfoResp uploadFile(String bucketName, MultipartFile file) throws Exception {        String contentType = file.getContentType();        return uploadFile(bucketName,file,contentType);    }        public Iterable<Result<DeleteError>> deleteFileSingle(String bucketName, String objectName) throws Exception {        return deleteFile(bucketName,objectName,null);    }        public Iterable<Result<DeleteError>> deleteFileBath(String bucketName, Iterable<String> objectNames) throws Exception {        return deleteFile(bucketName,null,objectNames);    }        public void deleteBucket(String bucketName) throws Exception {        MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey);        if (!minioClient.bucketExists(bucketName)) {            throw new BucketNotExistException("桶不存在");        }        minioClient.removeBucket(bucketName);    }        private Iterable<Result<DeleteError>> deleteFile(String bucketName, String objectName,Iterable<String> 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;        }    }        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]# lsdocker-compose.yaml  minio.tar.gz

编写docker-compose.yaml文件:

[root@test minio]# cat docker-compose.yamlversion: '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 -fAttaching to miniominio         | API: http://172.24.0.2:9000  http://127.0.0.1:9000minio         |minio         | Console: http://172.24.0.2:34327 http://127.0.0.1:34327minio         | minio         | Documentation: https://docs.min.iominio         |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 -dCreating network "minio_default" with the default driverCreating minio ... done[root@test minio]# docker ps -aCONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS                             PORTS                                                                                                                                 NAMESa5464ecaac1b   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                                                                         minio01f5e4eb4004   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 -fAttaching to miniominio         | API: http://172.19.0.2:9000  http://127.0.0.1:9000minio         |minio         | Console: http://172.19.0.2:9001 http://127.0.0.1:9001minio         |minio         | Documentation: https://docs.min.io

浏览器访问控制台:

MinIO存储在docker中安装及使用的方法是什么

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

MinIO存储在docker中安装及使用的方法是什么

到此,相信大家对“MinIO存储在docker中安装及使用的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯