您好,登錄后才能下訂單哦!
本篇內容主要講解“MinIO存儲在docker中安裝及使用的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MinIO存儲在docker中安裝及使用的方法是什么”吧!
MinIO 是一個基于Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3云存儲服務接口,非常適合于存儲大容量非結構化的數據,例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。
MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL
安裝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 掛載文件 將系統文件 映射到 容器內部對應的文件夾
這是安裝成功的日志:
更多信息:請訪問官網 https://docs.min.io/cn/
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(); } }
拉取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
瀏覽器訪問控制臺:
輸入docker-compose.yaml
文件中自定義的賬號密碼:
到此,相信大家對“MinIO存儲在docker中安裝及使用的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。