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();
    }
}
相关推荐
意疏10 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
墨鸦_Cormorant10 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker
Code_Artist10 小时前
Docker镜像加速解决方案:配置HTTP代理,让Docker学会科学上网!
docker·云原生·容器
wanmei00212 小时前
Dockerfile复制目录进入镜像里
docker
inter_peng12 小时前
[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
tcp/ip·docker·eureka
不爱说话郭德纲12 小时前
聚焦 Go 语言框架,探索创新实践过程
go·编程语言
Linux运维日记12 小时前
k8s1.31版本最新版本集群使用容器镜像仓库Harbor
linux·docker·云原生·容器·kubernetes
一名路过的小码农14 小时前
ceph 18.2.4二次开发,docker镜像制作
ceph·docker·容器
xiangshangdemayi16 小时前
Windows环境GeoServer打包Docker极速入门
windows·docker·容器·geoserver·打包·数据挂载
程序员JerrySUN17 小时前
熟悉的 Docker,陌生的 Podman
linux·docker·容器·系统架构·podman