当前位置: 首页 > ds >正文

在 Linux 和 Docker 中部署 MinIO 对象存储

目录

  • 一、适用于 Linux 的 MinIO 对象存储
    • 1.Minio服务安装
    • 2.Minio环境配置
      • 2.1 创建minio启动文件
      • 2.2 创建minio服务文件
      • 3.3 启动minio服务
    • 3.创建存储桶
      • 3.1 进入web端创建存储桶
      • 3.2 Minio Client(mc)创建存储桶
    • 4. s3fs-fuse 文件挂载
      • 4.1 s3fs-fuse配置
      • 4.2 执行s3fs挂载
      • 4.3 开机自动挂载
  • 二、适用于 Docker 的 MinIO 对象存储
    • 1.Minio环境配置
      • 1.1 拉取Minio基础镜像
      • 1.2 创建文件目录
      • 1.3 启动Minio服务
      • 1.4 访问Minio
    • 2.创建Minio存储桶并挂载
      • 2.1 创建Dockerfile文本文件
      • 2.2 基于Dockerfile构建镜像
      • 2.3 启动MC容器创建存储桶
    • 3.启动S3FS容器进行挂载

  • Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
  • Minio是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

一、适用于 Linux 的 MinIO 对象存储

1.Minio服务安装

  • 使用 RPM、DEB 或二进制文件将 MinIO 安装到 64 位 Linux 操作系统上(amd64(Intel或AMD64位处理器))
# 二进制文件下载安装
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
# sudo mv minio /usr/local/bin/
# DEB(Debian/Ubuntu)下载安装
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240510014138.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
#  MinIO RPM 下载和安装
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240510014138.0.0-1.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm

2.Minio环境配置

2.1 创建minio启动文件

# 递归创建目录的选项,如果目录的上级目录不存在也会一并创建
mkdir -p /usr/local/minio 
# 将minio和mc可执行文件放入创建的minio文件夹下
cp minio mc /usr/local/minio/
# 添加可执行权限
chmod +x minio mc 
# 创建存储文件
mkdir -p /data/miniodata/data{1..4}
mkdir -p /usr/local/minio/log/
touch /usr/local/minio/log/minio_server.log
  • 在当前文件夹下创建 run.sh 文件,chmod +x run.sh
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin
#export MINIO_STORAGE_CLASS_STANDARD=EC:3
#export MINIO_STORAGE_CLASS_RRS=EC:2
/usr/local/minio/minio server --console-address ":9090" --address ":9000" 
http://IP/data/miniodata/data{1..4}  >  /usr/local/minio/log/minio_server.log
  • export MINIO_ROOT_USER=admin,export MINIO_ROOT_PASSWORD=admin 设置账号密码,登录minio web端使用
  • export MINIO_STORAGE_CLASS_STANDARD=EC:3,export MINIO_STORAGE_CLASS_RRS=EC:2 纠删码策略,4块磁盘的可以不设置
  • –console-address “:9090” 设置minio的web端访问端口为9090,web端地址: http://IP:9090 , IP和端口根据具体情况自由设置
  • –address “:9000” 设置minio的api端口,即http访问图片端口,图片访问地址:http://IP:9000/图片名
  • http://IP/data/miniodata/data{1…4} 数据存储目录 /data/miniodata/data{1…4}
  • /usr/local/minio/log/minio_server.log 日志存储路径

2.2 创建minio服务文件

# 创建systemctl start minio的启动方式
vim /usr/lib/systemd/system/minio.service  
  • minio.service 文件内容如下,Restart=always 表示跟随系统开机启动 minio,让systemd总是重新启动此服务
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/usr/local/minio/
ExecStart=/usr/local/minio/run.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

3.3 启动minio服务

# 重新加载systemd服务文件
systemctl daemon-reload 
# 启动minio服务
systemctl start minio 
# 设置 minio 为开机启动
systemctl enable minio 
# 查看一下minio是否为running状态,为running状态表示服务启动成功
systemctl status minio

3.创建存储桶

3.1 进入web端创建存储桶

  • http://IP:9090 进入web端,通过设置的账号密码登录,然后创建桶 Buckets – Create Buckets (如:ai-pic) 创建完后,进入桶设置 Summary - Access Policy 为 public。

3.2 Minio Client(mc)创建存储桶

# 安装 MinIO 客户端
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help
# 添加一个 MinIO 服务器的配置,pipeline-minio 是配置的名称,可以自定义。http://127.0.0.1:9000 是 MinIO 服务器的地址,admin 是 MinIO 服务器的访问密钥(access key),admin 是 MinIO 服务器的秘密密钥(secret key)
mc config host add pipeline-minio http://127.0.0.1:9000 admin admin
# 删除Minio服务器配置mc config host remove pipeline-minio
# 查看本地的云存储服务器
mc config host list
# mb 是创建 bucket 子命令,minio-server/ai-pic 是在 minio-server 下创建一个叫做 ai-pic 的 bucket
mc mb pipeline-minio/ai-pic
# 查看bucket
mc ls pipeline-minio
# 删除bucket
mc rb pipeline-minio/ai-pic  #删除没有文件的bucket
mc rb pipeline-minio/ai-pic --force # 删除有文件的bucket
# 使用public关键字将MinIO存储桶设置为公共的
mc anonymous set public pipeline-minio/ai-pic
#  查看存储桶的状态信息,包括存储桶的创建时间、大小、对象数量等
mc stat pipeline-minio/ai-pic

4. s3fs-fuse 文件挂载

4.1 s3fs-fuse配置

  • 安装s3fs:Github: https://github.com/s3fs-fuse/s3fs-fuse
# 通过该命令判断是否有s3fs文件系统,如果没有则进行以下步骤
df -h | grep s3fs 
# s3fs-fuse在线安装
sudo yum install epel-release
sudo yum install s3fs-fuse
# s3fs-fuse rpm安装
rpm -Uvh s3fs-fuse-1.92-1.el7.x86_64.rpm --nodeps --force
# 创建认证文件
echo "admin:admin" > /root/.passwd-s3fs
# 更改认证文件权限
chmod 600 /root/.passwd-s3fs 
# 创建挂载目录,这个挂载目录不要选minio客户端的目录(即不要选 /data/miniodata/data{1..4}),选一个有存储空间的目录就行,比如 /data/ai-pic 
mkdir -p /data/ai-pic

4.2 执行s3fs挂载

# 执行s3fs挂载命令
s3fs -o passwd_file=/root/.passwd-s3fs -o use_path_request_style -o allow_other -o url=http://IP:9000  -o bucket=ai-pic /data/ai-pic
# 执行s3fs挂载命令,当挂载路径下已经有这个同名路径时,需要添加 -o nonempty 参数即可,即:
s3fs -o passwd_file=/root/.passwd-s3fs -o use_path_request_style -o allow_other -o url=http://IP:9000  -o bucket=ai-pic /data/ai-pic -o nonempty 
# 取消挂载命令
umount /data/ai-pic
# 卸载 FUSE(文件系统通用层)挂载点,-u 选项表示卸载挂载点,-z 选项表示卸载挂载点并强制卸载,/data/s3fs 是要卸载的挂载点的路径
fusermount -uz /data/s3fs
  • 将数据存入s3fs挂载路径下,即 /data/ai-pic/ 路径下,数据会同步到minio客户端的bucket内,同时可以通过url访问数据,如:http://IP:9000/ai-pic/abc.jpg。
  • 如果启docker服务,docker数据挂载路径应为 /data/ai-pic/ ,例如:-v /data/ai-pic:/ai-pic。

4.3 开机自动挂载

# 将挂载命令行加入/etc/rc.local实现开机自启动挂载
systemctl restart minio
s3fs -o passwd_file=/root/.passwd-s3fs -o use_path_request_style -o allow_other -o url=http://IP:9000  -o bucket=ai-pic /data/ai-pic -o nonempty 
# 注意检查/etc/rc.local必须要有可执行权限,chmod +x /etc/rc.d/rc.local

二、适用于 Docker 的 MinIO 对象存储

1.Minio环境配置

1.1 拉取Minio基础镜像

# 从 Docker Hub 上拉取 Minio 的最新镜像,MinIO是一个对象存储解决方案
docker pull minio/minio
# 从Docker Hub下载Minio客户端镜像,即MinIO Client(mc)镜像,mc工具是一个命令行客户端,用于与Minio服务器进行交互
docker pull minio/mc
# 从Docker Hub下载名为efrecon/s3fs:1.94,使用S3FS文件系统访问S3存储
docker pull efrecon/s3fs:1.94

1.2 创建文件目录

# 创建一个名为文件目录,并为其设置权限
# 用来存储上传文件的目录
mkdir -p -m 777 /data/minio/data
# 创建Minio外部挂载的配置文件,来存放配置
mkdir -p -m 777 /data/minio/config

1.3 启动Minio服务

# 启动Minio容器,使用环境变量创建
docker run -d --restart always --name pipeline-minio -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=admin -e MINIO_CONSOLE_PORT=60000 -e MINIO_API_PORT=9999 -v /data/minio:/data minio/minio server /data --console-address ":${MINIO_CONSOLE_PORT}" --address ":${MINIO_API_PORT}"
# Docker中部署Mino并挂载配置文件,使用端口映射
docker run -d --restart always -p 9090:9090 -p 9000:9000 --name pipeline-minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /data/minio/data:/data -v /data/minio/config:/root/.minio minio/minio:latest server /data --console-address ":9090" --address ":9000"
# # Docker中部署Mino并挂载配置文件,使用宿主机网络
docker run -d --restart always --net=host --name pipeline-minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /data/minio/data:/data minio/minio:latest server /data --console-address ":9001" --address ":9000"
  • -e MINIO_ROOT_USER=admin:设置Minio服务器的root用户名。
  • -e MINIO_ROOT_PASSWORD=admin:设置Minio服务器的root密码。
  • -e MINIO_CONSOLE_PORT=60000:设置Minio控制台端口。
  • -e MINIO_API_PORT=9999:设置Minio API端口。
  • -v /data/minio:/data:将本地目录/data/minio挂载到Minio服务器的/data目录。
  • server /data:运行Minio服务器,指定数据目录为/data,表示启动 Mino 服务器并将数据存储在容器内的 /data 目录。
  • --console-address ":${MINIO_CONSOLE_PORT}":设置Minio控制台地址为:${MINIO_CONSOLE_PORT}
  • --address ":${MINIO_API_PORT}":设置Minio API地址为:${MINIO_API_PORT}
  • --console-address ":9090":设置Minio控制台地址为:9090
  • --address ":9000":设置Minio API地址为:9000

1.4 访问Minio

  • 通过在首选的浏览器中输入MinIO服务器 Console控制台 中的任何主机名或IP地址来访问MinIO控制台,例如http://localhost:9001
curl http://localhost:9090
# 访问:http://10.0.28.83:9090/login 用户名:密码 admin:admin创建Minio存储桶

2.创建Minio存储桶并挂载

  • 通过访问Minio客户端(http://10.0.28.83:9090/login )创建存储桶(bucket)
  • 从Docker Hub下载Minio客户端镜像,即MinIO Client(mc)镜像,通过mc命令创建存储桶

2.1 创建Dockerfile文本文件

# MC.Dockerfile
FROM minio/mc
COPY ./docker/create_bucket.sh /create_bucket.sh
RUN chmod +x /create_bucket.sh
ENTRYPOINT ["/create_bucket.sh"]  # 当容器启动时,它会执行这个脚本
  • create_bucket.sh 创建存储桶执行脚本内容,mc指令
if mc stat pipeline-minio &> /dev/null; thenecho "Minio pipeline-minio  already exists."
elsemc config host add pipeline-minio ${MINIO_URL} ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}echo "Minio pipeline-minio ${MINIO_URL} added."
fi
if mc stat pipeline-minio/${MINIO_BUCKET} &> /dev/null; thenecho "Bucket ${MINIO_BUCKET} already exists."
elsemc mb pipeline-minio/${MINIO_BUCKET}
fi
mc anonymous set public pipeline-minio/${MINIO_BUCKET}

2.2 基于Dockerfile构建镜像

# 构建的镜像大小为77.3MB
docker build -t local.harbor.com/pipeline-python-mc:v1.0 -f ./docker/MC.Dockerfile .

2.3 启动MC容器创建存储桶

docker run -d --restart no --name pipeline-mc -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=admin -e MINIO_BUCKET=ai-pic -e MINIO_URL=http://127.0.0.1:9000 local.harbor.com/pipeline-python-mc:v1.0

3.启动S3FS容器进行挂载

# 在容器中使用S3FS文件系统访问S3存储
docker run -d --restart always --name pipeline-s3fs --privileged=true -v /data/s3fs:/opt/s3fs/bucket:rshared -e AWS_S3_ACCESS_KEY_ID=admin -e AWS_S3_SECRET_ACCESS_KEY=admin -e AWS_S3_BUCKET=ai-pic -e AWS_S3_URL=http://127.0.0.1:9000 -e S3FS_ARGS=use_path_request_style,allow_other -e S3FS_DEBUG=1 efrecon/s3fs:1.94
# docker部署minio的s3fs服务
docker run -d --restart=always --net=host --privileged --name s3fs \--device /dev/fuse \--cap-add SYS_ADMIN \--security-opt "apparmor=unconfined" \--env "AWS_S3_BUCKET={bucketName}" \--env "AWS_S3_ACCESS_KEY_ID=admin" \--env "AWS_S3_SECRET_ACCESS_KEY=admin" \--env "AWS_S3_URL=http://localhost:9000" \--env UID=$(id -u) \--env GID=$(id -g) \--env S3FS_DEBUG=1 \--env "S3FS_ARGS=use_path_request_style,allow_other,no_check_certificate,umask=000,nonempty" \-v {mountPath}:/opt/s3fs/bucket:rshared \efrecon/s3fs:1.91
  • --privileged true:给容器授予宿主机的特权
  • -v /data/s3fs:/opt/s3fs/bucket:rshared:将宿主机的/data/s3fs目录挂载到容器的/opt/s3fs/bucket目录,并设置为读写共享
  • -e AWS_S3_ACCESS_KEY_ID=admin:设置AWS S3的访问密钥ID为admin
  • -e AWS_S3_SECRET_ACCESS_KEY=admin:设置AWS S3的密钥访问权限为admin
  • -e AWS_S3_BUCKET=ai-pic:设置AWS S3的桶名称为ai-pic
  • -e AWS_S3_URL=http://127.0.0.1:9999:设置AWS S3的URL为http://127.0.0.1:9999
  • -e S3FS_ARGS=use_path_request_style,allow_other:设置S3FS的参数为use_path_request_style,allow_other
http://www.xdnf.cn/news/18494.html

相关文章:

  • 使用Spring Retry组件优雅地实现重试
  • 【Python】利用heapq 模块实现一个按优先级排序的队列
  • 数字化图书管理系统设计实践(java)
  • CorrectNav——基于VLM构建带“自我纠正飞轮”的VLN:通过「视觉输入和语言指令」预测导航动作,且从动作和感知层面生成自我修正数据
  • 学习嵌入式的第二十二天——数据结构——双向链表
  • 永磁同步电机谐波抑制算法(13)——传统预测控制与传统谐波抑制的碰撞
  • week2-[二维数组]排队
  • MySQL 50 道经典练习题及答案
  • Java毕业设计选题推荐 |基于SpringBoot+Vue的知识产权管理系统设计与实现
  • Effective C++ 条款52:写了placement new也要写placement delete
  • ES常用查询命令
  • SQL详细语法教程(七)核心优化
  • ubuntu系统上的conda虚拟环境导出方便下次安装
  • PiscCode使用MediaPipe Face Landmarker实现实时人脸特征点检测
  • YOLO11 到 C++ 落地全流程:ONNX 导出、NMS 判别与推理实战
  • Java 通过 m3u8 链接下载所有 ts 视频切片并合并转换为 mp4 格式
  • 《GPT-OSS 模型全解析:OpenAI 回归开源的 Mixture-of-Experts 之路》
  • 深入理解MySQL Ⅳ -- SQL性能分析工具
  • 文件操作NIO Files的简单使用
  • InfluxDB 查询性能优化实战(一)
  • SCAU学习笔记 - 自科三面前端方向实战演示
  • Disruptor核心接口EventHandler解析
  • 【Techlog】01入门-井筒数据整合软件的基本认识
  • C5.6:双电源发射极偏置、特殊类偏置、PNP型偏置电路
  • ODPS 十五周年实录 | 为 AI 而生的数据平台
  • 机器学习(Machine Learning, ML)
  • 项目1其二(验证码、jwt)
  • 《算法导论》第 33 章 - 计算几何学
  • 关于uniappx注意点1 - 鸿蒙app
  • 3ds Max 流体模拟终极指南:从创建到渲染,打造真实液体效果