ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Docker多节点部署Minio分布式文件系统并测试

2026/9/14 23:15:17 拓冰建站 浏览量
Docker多节点部署Minio分布式文件系统并测试

文章目录

  • 一、前提准备
  • 二、文件配置
      • 1. `.env`
      • 2. `env/minio.env`
      • 3. `docker-compose-minio.yml`
  • 三、测试
  • 四、Java测试
      • 1. 引入依赖
      • 2. 增删改

一、前提准备

准备如下文件夹和文件

./
├── docker-compose-minio.yml
├── .env
├── env
│   ├── minio.env
├── minio
│   ├── minio1
│   │   ├── data1
│   │   └── data2
│   ├── minio2
│   │   ├── data1
│   │   └── data2
│   ├── minio3
│   │   ├── data1
│   │   └── data2
│   └── minio4
│       ├── data1
│       └── data2

二、文件配置

1. .env

MINIO_VERSION=RELEASE.2024-01-29T03-56-32Z

2. env/minio.env

MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=minio123

3. docker-compose-minio.yml

version: "3.8"
networks:docker_xuecheng:ipam:config:- subnet: 172.20.0.0/16services:minio1:container_name: minio1image: minio/minio:${MINIO_VERSION}volumes:- ./minio/minio1/data1:/data1- ./minio/minio1/data2:/data2ports:- "9001:9000"- "9011:9001"env_file:- ./env/minio.envcommand: server --address ":9000" --console-address ":9001" http://172.20.2.{1...4}/data{1...2}networks:docker_xuecheng:ipv4_address: 172.20.2.1minio2:container_name: minio2image: minio/minio:${MINIO_VERSION}volumes:- ./minio/minio2/data1:/data1- ./minio/minio2/data2:/data2ports:- "9002:9000"- "9012:9001"env_file:- ./env/minio.envcommand: server --address ":9000" --console-address ":9001" http://172.20.2.{1...4}/data{1...2}networks:docker_xuecheng:ipv4_address: 172.20.2.2minio3:container_name: minio3image: minio/minio:${MINIO_VERSION}volumes:- ./minio/minio3/data1:/data1- ./minio/minio3/data2:/data2ports:- "9003:9000"- "9013:9001"env_file:- ./env/minio.envcommand: server --address ":9000" --console-address ":9001" http://172.20.2.{1...4}/data{1...2}networks:docker_xuecheng:ipv4_address: 172.20.2.3minio4:container_name: minio4image: minio/minio:${MINIO_VERSION}volumes:- ./minio/minio4/data1:/data1- ./minio/minio4/data2:/data2ports:- "9004:9000"- "9014:9001"env_file:- ./env/minio.envcommand: server --address ":9000" --console-address ":9001" http://172.20.2.{1...4}/data{1...2}networks:docker_xuecheng:ipv4_address: 172.20.2.4

在这里插入图片描述

三、测试

访问宿主机ip:9011,输入账号密码。

MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=minio123

点到Monitoring -> Metrics
在这里插入图片描述

四、Java测试

1. 引入依赖

        <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

2. 增删改

在这之前先去网页端,创建一个Bucket

package com.xuecheng.media;import io.minio.*;
import io.minio.errors.*;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.compress.utils.IOUtils;
import org.junit.jupiter.api.Test;import java.io.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;public class MinioTest {private MinioClient minioClient = MinioClient.builder().endpoint("http://192.168.101.65:9001") //改成你的宿主机ip.credentials("minio", "minio123").build();@Testpublic void testCreate() throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {ObjectWriteResponse file = minioClient.uploadObject(UploadObjectArgs.builder().bucket("test").filename("C:\\Users\\mumu\\Desktop\\1C6091EF9671978A9F1B6C6F8A3666FD.png").object("1.png").build());}@Testpublic void testDelete() throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {minioClient.removeObject(RemoveObjectArgs.builder().bucket("test").object("12.msi").build());}@Testpublic void testGet() throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket("test").object("1.png").build());FileOutputStream outputStream = new FileOutputStream(new File("C:\\Users\\mumu\\Desktop\\2.png"));IOUtils.copy(inputStream, outputStream);}}

在这里插入图片描述