中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MinIO存儲在docker中安裝及使用的方法是什么

發布時間:2023-04-03 17:51:39 來源:億速云 閱讀:172 作者:iii 欄目:開發技術

本篇內容主要講解“MinIO存儲在docker中安裝及使用的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MinIO存儲在docker中安裝及使用的方法是什么”吧!

    MinIO存儲在docker安裝及使用

    MinIO

    MinIO 是一個基于Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3云存儲服務接口,非常適合于存儲大容量非結構化的數據,例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。

    MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL

    docker 安裝Minio

    安裝docker鏡像

    # docker安裝鏡像
    docker pull minio/minio

    容器運行方式① 和 容器運行方式② 選擇一種就好。

    運行容器方式①

    # 后臺運行容器
    docker run -p 9000:9000 --name storage -di -v /storage/data:/data -v /storage/config:/root/.minio --restart=always minio/minio server /data
    
    1,進入容器
    docker exec -it storage sh
    
    2,查看配置文件中的key值
    cat /data/.minio.sys/config/config.json |grep Key
    “accessKey”: “507LX5P57F99DNEVF1GH”,
    “secretKey”: “Kc2tllnd9FQrgTzu0RSohir4B4svh3cLiueGZR5x”,
    “routingKey”: “”,

    運行容器方式②

    # 后臺運行容器方式
    docker run -p 9000:9000 --name storage -di --restart=always \
      -e "MINIO_ACCESS_KEY=superzheng" \
      -e "MINIO_SECRET_KEY=storage/File" \
      -v /storage/data:/data \
      -v /storage/config:/root/.minio \
      minio/minio server /data
      
    # -p 端口映射  將外部端口 映射到 容器內部端口  
    # --name 自定義容器名稱
    # -di 后臺運行的方式運行
    # --restart=always  一旦docker重啟或者開啟時,也自動啟動鏡像
    # -e 設置系統變量  在這里是設置Minio的ACCESS_KEY和SECRET_KEY
    # -v 掛載文件  將系統文件  映射到  容器內部對應的文件夾

    這是安裝成功的日志:

    MinIO存儲在docker中安裝及使用的方法是什么

    更多信息:請訪問官網 https://docs.min.io/cn/

    java代碼操作

    package cn.mesmile.oss.minio;
    
    import cn.hutool.core.util.StrUtil;
    import cn.mesmile.oss.domain.FileInfoResp;
    import cn.mesmile.oss.exception.BucketNotExistException;
    import cn.mesmile.oss.exception.ContentTypeException;
    import cn.mesmile.oss.exception.FileSizeMaxException;
    import io.minio.MinioClient;
    import io.minio.Result;
    import io.minio.messages.DeleteError;
    import io.minio.policy.PolicyType;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.InputStream;
    
    /**
     * @author zb
     * @date 2019/12/15 14:20
     * @Description:
     * Copyright (C),2019,AOSSCI Inc.傲勢科技有限公司
     *   Endpoint	對象存儲服務的URL
     *   Access key就像用戶ID,可以唯一標識你的賬戶。
     *   Secret key是你賬戶的密碼。
     */
    @Component
    public class FileService {
    
        /**
         * 對象存儲服務的URL, 注意 這里的endpoint填寫 url會報錯,這里endpoint的值應該為 【 http://ip:端口號 】 的形式  
         */
        @Value("${minio.endpoint}")
        private  String endpoint;
    
        /**
         * 就像用戶ID,可以唯一標識你的賬戶
         */
        @Value("${minio.access-key}")
        private  String accessKey;
    
        /**
         * 是你賬戶的密碼
         */
        @Value("${minio.secret-key}")
        private  String secretKey;
    
        // 上傳的最大限制 10 M
        private static final long MAX_SIZE =1024*1024*100;
    
        /**
         *  上傳圖片
         * @param bucketName  桶名稱
         * @param file        文件
         * @return
         * @throws Exception
         */
        public FileInfoResp uploadImage(String bucketName, MultipartFile file) throws Exception{
            String contentType = file.getContentType();
            // image/png
            if (!StrUtil.containsAny(contentType,"image")) {
                throw new ContentTypeException("文件類型錯誤,請上傳圖片文件。");
            }
            return uploadFile(bucketName,file,"image");
        }
    
        /**
         * 上傳文件
         * @param bucketName 桶名
         * @param file  文件
         * @return
         * @throws Exception
         */
        public FileInfoResp uploadFile(String bucketName, MultipartFile file) throws Exception {
            String contentType = file.getContentType();
            return uploadFile(bucketName,file,contentType);
        }
    
        /**
         *  刪除單個文件
         * @param bucketName
         * @param objectName
         * @return
         * @throws Exception
         */
        public Iterable<Result<DeleteError>> deleteFileSingle(String bucketName, String objectName) throws Exception {
            return deleteFile(bucketName,objectName,null);
        }
    
    
        /**
         *  批量刪除文件
         * @param bucketName  桶名
         * @param objectNames 批量路徑名稱
         * @return
         * @throws Exception
         */
        public Iterable<Result<DeleteError>> deleteFileBath(String bucketName, Iterable<String> objectNames) throws Exception {
            return deleteFile(bucketName,null,objectNames);
        }
    
    
        /**
         *  刪除桶
         * @param bucketName  桶名稱
         * @throws Exception
         */
        public void deleteBucket(String bucketName) throws Exception {
            MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey);
            if (!minioClient.bucketExists(bucketName)) {
                throw new BucketNotExistException("桶不存在");
            }
            minioClient.removeBucket(bucketName);
        }
    
    
        /**
         *  刪除文件
         * @param bucketName  桶的名稱
         * @param objectName  路徑名例:  /image/123.jpg
         * @param objectNames 批量路徑名:
         * @return
         * @throws Exception
         */
        private Iterable<Result<DeleteError>> deleteFile(String bucketName, String objectName,Iterable<String> objectNames) throws Exception {
            MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey);
            if (!minioClient.bucketExists(bucketName)) {
                throw new BucketNotExistException("桶不存在");
            }
            if (objectNames != null) {
                return minioClient.removeObject(bucketName, objectNames);
            } else {
                minioClient.removeObject(bucketName, objectName);
                return null;
            }
        }
    
    
        /**
         *  上傳文件
         * @param bucketName  桶的名稱
         * @param file   文件名
         * @param prefix  前綴
         * @return
         * @throws Exception
         */
        private FileInfoResp uploadFile(String bucketName, MultipartFile file, String prefix) throws Exception {
            if (file.getSize() > MAX_SIZE ) {
               throw new FileSizeMaxException("文件過大,超過限制大小:"+MAX_SIZE/(1024*1024.0)+" M");
            }
            MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey);
            minioClient.setBucketPolicy(bucketName,prefix, PolicyType.READ_WRITE);
            // 檢查桶是否存在,若不存在則創建一個
            if (!minioClient.bucketExists(bucketName)) {
                minioClient.makeBucket(bucketName);
            }
            InputStream inputStream = file.getInputStream();
            String contentType = file.getContentType();
            String filename = file.getOriginalFilename();
            String objectName = prefix + "/" +filename;
    
            // 上傳文件
            minioClient.putObject(bucketName,objectName,inputStream,contentType);
            return FileInfoResp.builder()
                    .bucketName(bucketName)
                    .fileName(filename)
                    .objectName(objectName)
                    .contentType(contentType)
                    .prefix(prefix)
                    .url(endpoint + "/" + bucketName + "/" + objectName)
                    .build();
        }
    
    }

    Docker-compose安裝部署MinIO存儲服務

    環境準備

    拉取minio的docker鏡像:docker pull minio/minio

    創建掛載目錄:

    [root@test data]# mkdir /mnt/data
    [root@test data]# pwd
    /mnt/data
    [root@test data]# cd /home/app/minio/
    [root@test minio]# ls
    docker-compose.yaml  minio.tar.gz

    編寫docker-compose.yaml文件:

    [root@test minio]# cat docker-compose.yaml
    version: '3'
    services:
      miniocheck:
        image: minio/minio:amd64
        command: server /data --console-address ":9001"
        volumes:
          - /mnt/data:/data # 持久化地址
        ports:
          - "9000:9000" # 綁定端口
          - "9001:9001"
        container_name: minio
        restart: always
        environment:
          MINIO_ROOT_USER: admin # 賬號
          MINIO_ROOT_PASSWORD: gbase;123 #密碼

    command指令中添加--console-address參數,否則瀏覽器訪問控制臺自動跳轉端口導致無法訪問,查看日志可看到如下信息:

    [root@test minio]# docker-compose logs -f
    Attaching to minio
    minio         | API: http://172.24.0.2:9000  http://127.0.0.1:9000
    minio         |
    minio         | Console: http://172.24.0.2:34327 http://127.0.0.1:34327
    minio         | 
    minio         | Documentation: https://docs.min.io
    minio         |
    minio         | WARNING: Console endpoint is listening on a dynamic port (34327), please use --console-address ":PORT" to choose a static port.
    minio         | Exiting on signal: TERMINATED

    啟動容器并訪問

    啟動容器,查看容器狀態:

    [root@test minio]# docker-compose up -d
    Creating network "minio_default" with the default driver
    Creating minio ... done
    [root@test minio]# docker ps -a
    CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS                             PORTS                                                                                                                                 NAMES
    a5464ecaac1b   minio/minio:amd64      "/usr/bin/docker-ent…"   5 seconds ago   Up 3 seconds                       0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp                                                                         minio
    01f5e4eb4004   dperson/samba:latest   "/sbin/tini -- /usr/…"   3 days ago      Up 24 seconds (health: starting)   0.0.0.0:139->139/tcp, :::139->139/tcp, 0.0.0.0:137-138->137-138/udp, :::137-138->137-138/udp, 0.0.0.0:445->445/tcp, :::445->445/tcp   samba_samba_1
    [root@test minio]# docker-compose logs -f
    Attaching to minio
    minio         | API: http://172.19.0.2:9000  http://127.0.0.1:9000
    minio         |
    minio         | Console: http://172.19.0.2:9001 http://127.0.0.1:9001
    minio         |
    minio         | Documentation: https://docs.min.io

    瀏覽器訪問控制臺:

    MinIO存儲在docker中安裝及使用的方法是什么

    輸入docker-compose.yaml文件中自定義的賬號密碼:

    MinIO存儲在docker中安裝及使用的方法是什么

    到此,相信大家對“MinIO存儲在docker中安裝及使用的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    德清县| 巩义市| 张家港市| 谷城县| 密山市| 峨边| 彭水| 新巴尔虎左旗| 鸡泽县| 玉林市| 大石桥市| 理塘县| 黎城县| 濮阳市| 共和县| 射阳县| 天台县| 安岳县| 黎平县| 凭祥市| 子长县| 贵州省| 苍溪县| 长垣县| 金坛市| 肥西县| 呼和浩特市| 二手房| 白沙| 安丘市| 保康县| 新绛县| 娄烦县| 疏附县| 临沂市| 津南区| 南雄市| 阜新市| 湘乡市| 玛沁县| 阜平县|