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();
    }
}
相关推荐
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
阿尔帕兹1 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
ZHOU西口3 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
架构师那点事儿6 小时前
golang 用unsafe 无所畏惧,但使用不得到会panic
架构·go·掘金技术征文
川石课堂软件测试8 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
追风林15 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
城南vision17 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge17 小时前
Docker篇(Docker Compose)
运维·docker·容器
梦魇梦狸º21 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
鬼才血脉21 小时前
docker+mysql配置
mysql·adb·docker