Docker:使用MinIO搭建对象存储平台

news2024/11/26 13:57:51

请关注微信公众号:拾荒的小海螺

1、简述

MinIO是一个基于对象存储技术的开源项目,它可以帮助用户快速搭建起私有的、高性能的对象存储平台。MinIO兼容Amazon S3 API,使得用户可以使用标准的S3工具和SDK来访问和管理MinIO存储的数据。此外,MinIO还提供了分布式部署、自动数据完整性检查、强大的安全性功能等特性,使得其成为了企业级对象存储方案的首选。

MinIO 之所以广受欢迎,是因为其具有以下特点:

  • 高性能。
    MinIO 是全球领先的对象存储服务先锋,目前在全世界有数百万的用户。在标准硬件上,读/写速度高达每秒几百 GB。

  • 可扩展性。
    MinIO 借鉴了 Web 缩放器,为对象存储带来了简单的扩缩模型。在部署 MinIO 时,扩展从单个群集开始。

  • 云原生支持。
    MinIO 是在过去几年内从 0 开始打造的一款存储方案,符合一切云原生计算的架构和构建流程,并且包含最新的云计算技术和理念。

  • 纯开源。
    MinIO 基于 Apache V2 license 100% 开放源代码。这就意味着 MinIO 的客户能够自动、无限制、自由免费地使用和集成 MinIO、自由创新和创造、自由修改和完善、自由再次发行新版本和组合软件。

  • 兼容 S3 存储。
    AWS 的 S3 API(接口协议)是在全球范围内达到共识的对象存储协议,是全世界内大家都认可的标准。

  • 极简。
    极简主义是 MinIO 的指导性设计原则。简单性减少了出错的机会,提高了正常运行时间,提供了可靠性,同时简单性又是性能的基础。

  • 支持多云。
    可以创建数以百万计的实例部署在私有云、公有云和边缘计算环境。

2、安装

创建用于存放Minio外部挂载的配置文件目录和存储上传文件的目录:

mkdir -p /shop/minio/data
mkdir -p /shop/minio/config

通过docker指令拉取Minio线上最新的版本:

docker pull minio/minio

通过docker run 运行当前Minio镜像:

docker run \
   --name minio \
   -p 9000:9000 \
   -p 9090:9090 \
   -d --restart=always \
   -e "MINIO_ACCESS_KEY=minioadmin" \
   -e "MINIO_SECRET_KEY=minioadmin" \
   -v /shop/minio/data:/data \
   -v /shop/config:/root/.minio \
   minio/minio server /data --console-address ":9090"

运行成功后,打开浏览器,访问Linux 的9090端口,即可看到 MinIO:
在这里插入图片描述

备注:API访问要通过9000端口来实现:

API: http://192.168.0.4:9000  http://127.0.0.1:9000 
WebUI: http://192.168.0.4:9090 http://127.0.0.1:9090 

3、准备工作

首先,确保已经在本地或远程服务器上部署了MinIO服务,并获取到MinIO的访问密钥(Access Key)和密钥(Secret Key)。

其次,我们需要在Java项目中引入MinIO的Java SDK依赖。可以通过Maven或Gradle进行管理,在 pom.xml 或 build.gradle 中添加以下依赖:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>7.1.0</version>
</dependency>
3.1 实现上传文件功能
import io.minio.MinioClient;
import io.minio.errors.MinioException;
import io.minio.messages.Bucket;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

public class MinioUploader {

    public static void main(String[] args) {
        try {
            // 初始化MinioClient对象
            MinioClient minioClient = MinioClient.builder()
                    .endpoint("http://minio.example.com") // MinIO服务器地址
                    .credentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY") // 访问密钥和密钥
                    .build();

            // 检查存储桶是否存在,不存在则创建
            boolean isExist = minioClient.bucketExists("my-bucket");
            if (!isExist) {
                minioClient.makeBucket("my-bucket");
            }

            // 上传文件
            minioClient.uploadObject("my-bucket", "example-file.txt", "/path/to/local/file");

            System.out.println("文件上传成功!");
        } catch (MinioException | IOException | InvalidKeyException | NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}
3.2 实现下载文件功能
import io.minio.MinioClient;
import io.minio.errors.MinioException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

public class MinioDownloader {

    public static void main(String[] args) {
        try {
            // 初始化MinioClient对象
            MinioClient minioClient = MinioClient.builder()
                    .endpoint("http://minio.example.com") // MinIO服务器地址
                    .credentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY") // 访问密钥和密钥
                    .build();

            // 下载文件
            minioClient.downloadObject("my-bucket", "example-file.txt", "/path/to/local/destination");

            System.out.println("文件下载成功!");
        } catch (MinioException | IOException | InvalidKeyException | NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

在以上示例中,我们通过Java SDK与MinIO建立连接,实现了文件的上传和下载功能。在实际项目中,可以根据需要对上传、下载的文件进行更详细的处理和管理,例如文件的权限设置、元数据管理等。

4、总结

通过本文的介绍,你已经了解了如何使用Docker来快速部署和运行MinIO服务。MinIO作为一款开源的对象存储系统,具有高性能、高可用性和易部署等特点,为用户提供了一种简单、高效的对象存储解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1558792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查找--二分查找(Binary Search)

二分查找属于静态查找表&#xff0c;当以有序表表示静态查找表时&#xff0c;查找函数可用折半查找来实现。 查找过程&#xff1a;先确定待查记录所在的范围&#xff08;区间&#xff09;&#xff0c;然后逐步缩小范围直到找到或找不到该记录为止。 以处于区间中间位置记录的…

B样条曲线(记录)

B样条曲线的生成靠的两点&#xff1a; 1、控制点 2、基函数 B样条曲线的基函数是一个De Boor的递归表达式[1]&#xff1a; (1) (2) 其中是第个阶基函数。 而B样条曲线可以表示为[2]&#xff1a; (3) 如何理解上式&#xff1f;首先&#xff0c;我们知道&#xff0c;如果一个函数…

高端的电子画册,手机打开你见过吗?

手机阅读的高端电子画册&#xff0c;你见过吗&#xff1f;随着移动互联网的发展&#xff0c;越来越多的人选择在手机上阅读电子画册&#xff0c;而不是传统的纸质画册。这种趋势不仅节省了纸张资源&#xff0c;还提升了阅读体验。用户可以通过触摸屏幕、放大缩小、翻页等操作与…

【Blockchain】区块链浏览器 | 以太坊Etherscan比特币Blockchain门罗币Monero

区块链浏览器概述 区块链浏览器是一种软件,它使用API(应用程序编程接口)和区块链节点从区块链中提取各种数据&#xff0c;然后使用数据库来排列搜索到的数据&#xff0c;并以可搜索的格式将数据呈现给用户。 用户的输入是资源管理器上的可搜索项&#xff0c;然后通过数据库上…

empdll文件安装在哪里,详细的修复教程分享

在我们运行《荒野大镖客2》游戏的时候&#xff0c;有些玩家在游玩过程中可能会遇到emp.dll文件丢失的问题。此文件作为游戏运行过程中不可或缺的动态链接库&#xff08;DLL&#xff09;组件之一&#xff0c;丢失会导致游戏无法正常运行。小编将介绍5种解决emp.dll文件丢失的方法…

linux安装Zookeeper的详细步骤

1.Java环境确认 确保已经安装了Java环境&#xff0c;没有的自行安装 2.官网下载包 Apache ZooKeeper 3.安装 3.1上传到linux&#xff0c;解压 我的目录为/root/apache-zookeeper-3.8.4-bin 进入到/root/apache-zookeeper-3.8.4-bin/conf目录下&#xff0c;执行命令复制zoo…

C++2D原创我的世界1.00.3版本上市!!!

我很郁闷&#xff0c;为什么就是整不了昼夜交替啊喂&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 虽然这看上去很简单&#xff0c;但做起来要我命&#xff01;&#xff01;&#xff01; 优化过后总共1312行&#xff0c…

微信公众号迁移公证书在哪?

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;很多小伙伴想做公众号迁移&#xff0c;但是不知道公众号迁移有什么作用&#xff0c;今天跟大家具体讲解一下。首先公众号迁移最主要的就是修改公众号的主体了&#xff0c;比如我们公众号原来是A公司的&#xff0c;现…

指针强化练习(详解)

更多学习内容 结构体内存对齐 和 位段-CSDN博客指针初级&#xff08;基础知识&#xff09;-CSDN博客指针进阶(深入理解)-CSDN博客 目录 1.sizeof与strlen的区别 2.一维数组 3.字符指针 4.二维数组 5.指针运算(笔试题) 6.函数指针 1.sizeof与strlen的区别 请思考以下运行结…

第1章.提示词:开启AI智慧之门的钥匙

什么是提示词&#xff1f; 提示词&#xff0c;是引导语言模型的指令&#xff0c;让用户能够驾驭模型的输出&#xff0c;确保生成的文本符合需求。 ChatGPT&#xff0c;这位文字界的艺术大师&#xff0c;以transformer架构为基石&#xff0c;能轻松驾驭海量数据&#xff0c;编织…

Chrome浏览器隐藏的截图功能配置及使用

来自实用又方便&#xff0c;轻松打开Chrome浏览器隐藏的截图功能&#xff01;​​​​​​​ 一、通过谷歌Chrome浏览器 现在直接通过谷歌Chrome浏览器内置功能&#xff0c;免安装扩充插件也可以实现Chrome的截图和长截图功能了&#xff01; 也不需要额外安装任何截图工具 &a…

【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?

目录 1 -> priority_queue的介绍和使用 1.1 -> priority_queue的介绍 1.2 -> priority_queue的使用 1.3 -> priority_queue的模拟实现 2 -> 容器适配器 2.1 -> 什么是适配器 2.2 -> STL标准库中stack和queue的底层结构 2.3 -> deque的介绍 2.…

吐丝的蜘蛛-第15届蓝桥第5次STEMA测评Scratch真题精选

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第176讲。 如果想持续关注Scratch蓝桥真题解读&#xff0c;可以点击《Scratch蓝桥杯历年真题》并订阅合集&#xff0c;…

MySQL面试必备一之索引

本文首发于公众号&#xff1a;Hunter后端 原文链接&#xff1a;MySQL面试必备一之索引 在面试过程中&#xff0c;会有一些关于 MySQL 索引相关的问题&#xff0c;以下总结了一些&#xff1a; MySQL 的数据存储使用的是什么索引结构B 树的结构是什么样子什么是复合索引、聚簇索…

嵌入式第一部分-第一集:ARM那些你得知道的事

ARM&#xff1a;Advanced RISC Machine&#xff0c;先进精简指令集机器 ARM公司只做设计&#xff0c;不生产。 国内IC生产厂商&#xff1a;华为海思、全志、瑞芯微、MTK&#xff08;联发科&#xff09; 扩展&#xff1a;ARM的商业模式了解。 使用三星S5PV210开发板进行视频的讲…

红黑树介绍及插入操作的实现

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

CubeIDE 下如何将版本号和日期关联。

1. 使用__DATE__ 和__TIME__获取编译日期和时间。 2. 将__DATE__ 和__TIME__转换成UINT 3. 将转换后的数赋值给版本号。 4. 设置工程保证每次都会重新编译对应文件。 对应函数如下&#xff1a; uint8_t VER_MAIN; uint8_t VER_SUB; uint8_t VER_MIN; #include <stdlib.…

原子类 AtomicReference 详解

通过对 AtomicInteger、AtomicBoolean 和 AtomicLong 分析我们发现&#xff0c;这三个原子类只能对单个变量进行原子操作&#xff0c;那么我们如果要对多个变量进行原子操作&#xff0c;这三个类就无法实现了。那如果要进行多个变量进行原子操作呢&#xff1f;操作方式就是&…

node.js的错误处理

当我打开一个不存在的文件时&#xff0c;错误如下&#xff1a; 在读取文件里面写入console.log&#xff08;err&#xff09;&#xff0c;在控制台中可以看到我的错误代码类型&#xff1a;文件不存在的错误代码 ENOENT。见更多错误代码---打开node.js官方API文档Error 错误 | N…

AtCoder Beginner Contest 347 A - E

A - Divisible 大意 给定个数&#xff0c;对于其中能被整除的数&#xff0c;输出商。 思路 直接计算即可。 代码 #include<iostream> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int n, k;cin >> n >> k;while…