Docker 使用 | 免费开源对象存储 MINIO

Docker 使用 | 免费开源对象存储 MINIO

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

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:9000MinIO服务会暴露9000端口来对外提供对象访问,使用8006来访问资源
  • -p 9001:9001MinIO服务会提供一个可视化管理系统,默认在 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_USERMINIO_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/apublic文件才能被外界访问
  • 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


  • 引入依赖miniookhttp
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();
    }
}
相关推荐
一张假钞4 小时前
Linux 系统 Docker Compose 安装
linux·运维·docker
zhanglb128 小时前
liunx - 麒麟系统v10 SP1 执行脚本文件
linux·docker
k8s-open9 小时前
跨架构镜像打包问题及解决方案
macos·docker·容器·架构
xrz27711 小时前
docker部署ELK,ES开启安全认证
elk·elasticsearch·docker
程序员爱钓鱼14 小时前
Go Modules 详解 -《Go语言实战指南》
后端·google·go
DemonAvenger14 小时前
Go内存池设计与实现:减少GC压力的技术实践
性能优化·架构·go
用户6986083955715 小时前
用go从零构建写一个RPC(1)--Server端基础功能
rpc·go
三金C_C1 天前
docker 部署 gin
docker·容器·gin
家庭云计算专家1 天前
Portainer安装指南:多节点监控的docker管理面板-家庭云计算专家
docker
aiguangyuan1 天前
Go语言中的数据类型转换
go·后端开发