Docker 使用 | 免费开源对象存储 MINIO
MinIO
是一种开源的对象存储服务器,通过使用标准的HTTP/REST API 来访问和管理数据。它采用分布式架构 ,具有高性能、高可用性和可扩展性。MinIO
可以帮助用户轻松管理和存储大量的非结构化数据,并与其他应用程序和工具进行集成。
- 英文:min.io/


Docker
搭建
1 搜索镜像
sql
docker search minio

2 拉取镜像
bash
docker pull bitnami/minio

3 查看下载好的镜像
docker images

4 依据镜像创建容器
bash
docker run -it -d --name minio -p 8006:9000 -p 8007:9001 -v /home/robertchao/docker_images/minio/minio_data:/data -e MINIO_ROOT_USER="robertchao" -e MINIO_ROOT_PASSWORD="robertchao" bitnami/minio:latest
-it
:-i
表示以交互模式运行容器;-t
表示为容器重新分配一个伪输入终端;一同使用-it
-d
:以守护进程方式来启动容器,后台运行-p 8006:9000
:MinIO
服务会暴露9000
端口来对外提供对象访问,使用8006
来访问资源-p 9001:9001
:MinIO
服务会提供一个可视化管理系统,默认在 9001 端口运行,使用8007
来访问-v /minio/data:/data
:挂载数据卷,将minio
容器内存储的文件映射到宿主机-e MINIO_ROOT_USER="robertchao"
:设置 root 用户名-e MINIO_ROOT_PASSWORD="robertchao"
:设置 root 的密码
5 创建并执行compose.yaml
bash
mkdir minio && cd minio/
mkdir minio_data/
touch compose.yaml
vim compose.yaml
-
compose.yaml
文件内容MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
不要外加"
,否则登录账号密码会夹带"
yaml
services:
minio:
hostname: "minio"
ports:
- "8006:9000"
- "8007:9001"
restart: 'always'
image: "bitnami/minio:latest"
environment:
- MINIO_ROOT_USER=robertchao
- MINIO_ROOT_PASSWORD=robertchao
volumes:
- /home/robertchao/docker_images/minio/minio_data:/data
networks:
default:
name: zentaonet

6 查看MINIO
容器的启动日志
docker logs docker logs minio-minio-1

7 控制台
http://192.168.216.129:8007/login

控制台使用
1 进入首页
进入系统首页,默认展示存储桶列表,新服务,空的数据。

2 创建桶
根据提示,点击 Create a Bucket
开始创建存储桶



3 进入此桶的概要展示页面

- 修改
n/a
为public
,文件才能被外界访问

private
未经授权不能进行任何操作,所有Access Rules失效

public
不经过任何认证可以直接访问资源

custom
自定义策略Access Rule

4 上传文件
- 点击右上角的文件夹按钮,预览桶内的文件

- 进入之后可以看到
upload
按钮,点击上传文件

- 将
tiktok
上下载的视频上传到桶中

- 点击文件,查看更多操作,支持下载,分享和预览,展示文件的基本信息

5 分享视频

- 访问浏览

- 预览,可以预览的

6 看分享链接不知道是啥?这一大堆
perl
http://localhost:9000/tiktok-video/%E4%B8%8B%E8%BD%BD.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=S45RF3BL12OQ6EVKU21I%2F20240205%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240205T143144Z&X-Amz-Expires=43200&X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJTNDVSRjNCTDEyT1E2RVZLVTIxSSIsImV4cCI6MTcwNzE4NTczNywicGFyZW50Ijoicm9iZXJ0Y2hhbyJ9.i2uiuKgdbD8pumNnb5ukkLHZPuyT1XSxdsp0isS5fJYDbMYWaztLR4V41cjzSXwcYaLQGk8GWAwaHK_Ggw1-3Q&X-Amz-SignedHeaders=host&versionId=null&X-Amz-Signature=5546485bd05701a13a7d912d631c28e7ca3bc85ff0b4673a3290346901805239
- 改端口号,如下,还是访问失败
perl
http://192.168.219.126:8006/tiktok-video/%E4%B8%8B%E8%BD%BD.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=S45RF3BL12OQ6EVKU21I%2F20240205%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240205T143144Z&X-Amz-Expires=43200&X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJTNDVSRjNCTDEyT1E2RVZLVTIxSSIsImV4cCI6MTcwNzE4NTczNywicGFyZW50Ijoicm9iZXJ0Y2hhbyJ9.i2uiuKgdbD8pumNnb5ukkLHZPuyT1XSxdsp0isS5fJYDbMYWaztLR4V41cjzSXwcYaLQGk8GWAwaHK_Ggw1-3Q&X-Amz-SignedHeaders=host&versionId=null&X-Amz-Signature=5546485bd05701a13a7d912d631c28e7ca3bc85ff0b4673a3290346901805239
- 偶然间删除这段后缀
perl
http://192.168.219.126:8006/tiktok-video/%E4%B8%8B%E8%BD%BD.mp4

Java
对接MINIO
- 引入依赖
minio
与okhttp
xml
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.7</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
Java
测试代码
java
@Slf4j
public class MinioTest {
public static final String MINIO_END_POINT = "http://192.168.216.129:8006";
public static final String MINIO_ACCESS_KEY = "robertchao";
public static final String MINIO_SECRE_KEY = "robertchao";
public static final String MINIO_TIKTOK_BUCKET_NAME = "tiktok-video";
public static final MinioClient minioClient = MinioClient.builder()
.endpoint(MINIO_END_POINT)
.credentials(MINIO_ACCESS_KEY, MINIO_SECRE_KEY)
.build();
public static void main(String[] args) {
MinioTest minioTest = new MinioTest();
List<Bucket> allBuckets = minioTest.getAllBuckets();
allBuckets.stream().forEach(a-> System.out.println(a.name()));
}
@SneakyThrows(Exception.class)
public List<Bucket> getAllBuckets(){
return minioClient.listBuckets();
}
}
