docker部署MinIO对象存储实践:含控制台功能恢复方案

1.项目介绍 📋

1.1 什么是MinIO?

MinIO是一款高性能的开源对象存储服务器,兼容Amazon S3 API,适用于存储非结构化数据(图片、视频、日志、备份等)。它采用分布式架构设计,支持数据冗余和弹性扩展,同时提供简洁的Web管理界面。

官方仓库介绍: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.

本文简要介绍单机模式下的部署及控制台功能恢复

1.2 参考地址

项目仓库
下载地址
minio中文文档

2.部署 ⚙️

image.png

我们查看minio帮助
image.png

再查看server命令详细参数
image.png

我们将上述帮助翻译成中文

bash-5.1# minio server --help
NAME:
  minio server - 启动物体存储服务器

USAGE:
  minio server [FLAGS] DIR1 [DIR2..]
  minio server [FLAGS] DIR{1...64}
  minio server [FLAGS] DIR{1...64} DIR{65...128}

DIR:
  DIR指向文件系统上的一个目录。当你想要将多个驱动器组合成一个大型系统时,每个文件系统传递一个目录,并用空格分隔。你也可以使用“...”约定来缩写目录参数。在分布式设置中,远程目录被编码为HTTP(s)URI。

FLAGS:
  --config value               通过YAML配置指定服务器配置 [$MINIO_CONFIG]
  --address value              绑定到特定的ADDRESS:PORT,ADDRESS可以是IP或主机名(默认值:":9000"[$MINIO_ADDRESS]
  --console-address value      为嵌入式控制台UI绑定特定的ADDRESS:PORT,ADDRESS可以是IP或主机名 [$MINIO_CONSOLE_ADDRESS]
  --ftp value                  启用并配置FTP(安全)服务器
  --sftp value                 启用并配置SFTP服务器
  --certs-dir value, -S value  证书目录的路径(默认值:"/root/.minio/certs"--quiet                      禁用启动和信息消息
  --anonymous                  隐藏日志中的敏感信息
  --json                       以JSON格式输出日志
  --help, -h                   显示帮助

EXAMPLES:
  1. 在"/home/shared"目录上启动MinIO服务器。
     $ minio server /home/shared

  2. 使用64个本地驱动器"/mnt/data1""/mnt/data64"启动单节点服务器。
     $ minio server /mnt/data{1...64}

  3. 在一个有32个节点、每个节点有32个驱动器的分布式环境中启动MinIO服务器,在所有节点上运行以下命令:
     $ minio server http://node{1...32}.example.com/mnt/export{1...32}

  4. 在一个扩展的分布式环境中启动MinIO服务器,在所有节点上运行以下命令:
     $ minio server http://node{1...16}.example.com/mnt/export{1...32} \
            http://node{17...64}.example.com/mnt/export{1...64}

  5. 在所有接口上分别通过端口8021和8022启动带有FTP和SFTP服务器的分布式MinIO服务器:
     $ minio server http://node{1...4}.example.com/mnt/export{1...4} \
           --ftp="address=:8021" --ftp="passive-port-range=30000-40000" \
           --sftp="address=:8022" --sftp="ssh-private-key=${HOME}/.ssh/id_rsa"

2.1 参数解释

🔑 认证参数(必需)
参数类型说明示例
MINIO_ROOT_USER环境变量管理员账号-e "MINIO_ROOT_USER=admin"
MINIO_ROOT_PASSWORD环境变量管理员密码-e "MINIO_ROOT_PASSWORD=Your@Strong!Pass"

安全建议:密码长度≥8位,包含大小写字母+数字+特殊符号

🌐 网络端口参数
参数类型说明示例
--address命令行API服务监听端口server /data --address ":9000"
--console-address命令行Web控制台端口--console-address ":9001"
MINIO_SERVER_URL环境变量外部访问URL-e "MINIO_SERVER_URL=https://minio.example.com"

端口映射示例:docker run -p 9000:9000 -p 9001:9001 ...

💾 存储参数
参数类型说明示例
目录路径命令行数据存储位置server /data
MINIO_REGION环境变量存储区域名称-e "MINIO_REGION=us-east-1"
MINIO_DOMAIN环境变量虚拟主机域名-e "MINIO_DOMAIN=storage.example.com"

多磁盘部署:server /disk1 /disk2 /disk3 /disk4

🔐 安全加密参数
参数类型说明示例
--certs-dir命令行SSL证书目录--certs-dir /etc/minio/certs
⚙️ 性能调优参数
参数类型说明示例
MINIO_STORAGE_CLASS_STANDARD环境变量存储类配置-e "MINIO_STORAGE_CLASS_STANDARD=EC:2"
MINIO_API_REQUESTS_DEADLINE环境变量API超时时间(秒)-e "MINIO_API_REQUESTS_DEADLINE=60"
MINIO_CACHE_DRIVES环境变量缓存磁盘路径-e "MINIO_CACHE_DRIVES=/mnt/cache"
MINIO_CACHE_EXCLUDE环境变量缓存排除规则-e "MINIO_CACHE_EXCLUDE=*.tmp"

📊 监控诊断参数
参数类型说明示例
MINIO_PROMETHEUS_AUTH_TYPE环境变量Prometheus认证-e "MINIO_PROMETHEUS_AUTH_TYPE=public"
MINIO_AUDIT_WEBHOOK_ENDPOINT环境变量审计日志地址-e "MINIO_AUDIT_WEBHOOK_ENDPOINT=http://logserver"
MINIO_LOG_QUERY_URL环境变量日志查询地址-e "MINIO_LOG_QUERY_URL=http://loki:3100"
--quiet命令行禁止启动日志server /data --quiet
🛡️ 安全加固参数
参数类型说明示例
MINIO_BROWSER环境变量禁用Web控制台-e "MINIO_BROWSER=off"
MINIO_SERVER_DEBUG环境变量调试模式-e "MINIO_SERVER_DEBUG=on" (临时诊断)
MINIO_ROOT_PASSWORD_HASH环境变量密码哈希值替代明文密码(生产推荐)
MINIO_DISABLE_*环境变量禁用特定功能MINIO_DISABLE_METRICS=on

2.2 cli命令部署

根据上述参数,我们很容易就编写好cli模式部署的命令

docker run -d \
  -p 9000:9000 \
  -p 9001:9001 \
  --name minio \
  -v ~/minio/data:/data \
  -e "MINIO_ROOT_USER=minioadmin" \
  -e "MINIO_ROOT_PASSWORD=12345678" \
 minio/minio server /data --console-address ":9001"

2.3 docker-compose模式部署

创建docker-compse文件

mkdir minio
cd minio
mkdir data
touch docker-compose.yml
vim docker-compose.yml

编写docker-compose.yml

version: '3.8'

services:
  minio:
    image: minio/minio
    container_name: minio_server
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: 12345678
    ports:
      - "9000:9000"   # API 端口
      - "9001:9001"   # Web 控制台端口
    volumes:
      - ./data:/data   # 使用命名卷
    restart: unless-stopped

启动

docker compose up -d

访问控制台页面http://127.0.0.1:9000
image.png
image.png
我们可以看到控制台功能非常的少,

2.4 通过历史版本恢复控制台功能

我们可以通过minio/minio · Quay进行查询历史版本

image.png

image.png

经测试,2025-04-22版本是最后一个支持完整控制台的版本

docker pull quay.io/minio/minio:RELEASE.2025-04-22T22-12-26Z

如果需要完整控制台功能可以安装该版本,需要在docker run命令中或者docker-compose.yml文件中进行版本指定

image.png

重新部署,可以看到,控制台功能已经恢复。

<think>我们正在讨论如何在虚拟机中使用Docker部署MinIO。根据提供的引用内容,我们可以整理出以下步骤:1.首先,确保虚拟机中已安装Docker。如果没有安装,需要先安装Docker。2.拉取MinIODocker镜像(如果尚未存在,Dockerrun命令会自动拉取)。3.使用dockerrun命令启动MinIO容器,并配置相关参数。具体命令示例在引用[2]中给出:```bashdockerrun-p9000:9000--net=host--nameminio-d--restart=always-e"MINIO_ACCESS_KEY=minioadmin"-e"MINIO_SECRET_KEY=minioadmin"-v/usr/local/docker/minio/data:/data-v/usr/local/docker/minio/config:/root/.miniominioserver/data--console-address":9090"-address":9000"```解释参数:-`-p9000:9000`:将容器的9000端口映射到主机的9000端口(用于API访问)。-`--net=host`:使用主机网络模式,这样可以简化网络配置(但注意,如果使用主机网络模式,则-p端口映射可能无效,因为容器直接使用主机网络。根据需求,可以选择移除`--net=host`,或者保留并使用端口映射)。-`--nameminio`:容器名称。-`-d`:后台运行。-`--restart=always`:容器退出时总是重启。-`-e`:设置环境变量,这里设置访问密钥和秘密密钥(示例中为minioadmin,生产环境应更改)。-`-v`:挂载卷,将主机目录挂载到容器内,用于持久化存储数据和配置。-`minioserver/data`:启动MinIO服务器,数据目录为/data。-`--console-address":9090"`:控制台端口(Web管理界面)为9090。-`-address":9000"`:API端口为9000。注意:上述命令中同时指定了控制台地址和API地址,并且使用了主机网络模式(--net=host)。如果使用主机网络模式,那么容器将使用宿主机的网络,此时端口映射(-p)是不必要的,因为容器直接使用主机端口。但命令中仍然有`-p9000:9000`,这可能会产生冲突。因此,建议根据实际情况选择:方案一:使用主机网络(移除-p参数)```bashdockerrun--net=host--nameminio-d--restart=always-e"MINIO_ACCESS_KEY=minioadmin"-e"MINIO_SECRET_KEY=minioadmin"-v/usr/local/docker/minio/data:/data-v/usr/local/docker/minio/config:/root/.miniominioserver/data--console-address":9090"-address":9000"```方案二:不使用主机网络(使用端口映射,移除--net=host)```bashdockerrun-p9000:9000-p9090:9090--nameminio-d--restart=always-e"MINIO_ACCESS_KEY=minioadmin"-e"MINIO_SECRET_KEY=minioadmin"-v/usr/local/docker/minio/data:/data-v/usr/local/docker/minio/config:/root/.miniominioserver/data--console-address":9090"-address":9000"```这里我们增加了9090端口的映射,以便访问控制台。步骤指南:1.创建用于持久化的目录(根据命令中的挂载点):```bashmkdir-p/usr/local/docker/minio/datamkdir-p/usr/local/docker/minio/config```2.执行dockerrun命令(选择上述方案之一)。例如选择方案二:```bashdockerrun-p9000:9000-p9090:9090\--nameminio\-d\--restart=always\-e"MINIO_ACCESS_KEY=minioadmin"\-e"MINIO_SECRET_KEY=minioadmin"\-v/usr/local/docker/minio/data:/data\-v/usr/local/docker/minio/config:/root/.minio\minioserver/data\--console-address":9090"\-address":9000"```3.等待容器启动,然后可以通过虚拟机IP:9090访问MinIO控制台(使用设置的访问密钥和秘密密钥登录)。注意:如果虚拟机有防火墙,确保开放9000和9090端口。此外,引用[1]中提到MinIO对象存储,用于存储各种数据,并且功能强大。部署完成后,可以整合SpringBoot等应用使用。[^1]:Docker部署minio存储及整合springboot使用。[^2]:Docker部署Minio(服务器上部署Minio)。§§相关问题§§1.如何修改MinIO的访问密钥和秘密密钥?2.MinIO的数据持久化是如何工作的?3.如何在Docker中更新MinIO容器?4.MinIO控制台无法访问可能的原因是什么?</think>### 在虚拟机中使用Docker部署MinIO的指南 #### 1️⃣ **前提条件** - 已安装虚拟机(如VMware/VirtualBox) - 虚拟机中已安装Docker([官方安装指南](https://docs.docker.com/engine/install/)) - 预留至少1GB内存(MinIO要求) #### 2️⃣ **部署步骤** **(1) 创建持久化存储目录** ```bash mkdir -p /minio/data /minio/config ``` **(2) 启动MinIO容器** ```bash docker run -d \ -p 9000:9000 \ # API端口 -p 9090:9090 \ # 控制台端口 --name minio \ -v /minio/data:/data \ # 数据持久化 -v /minio/config:/root/.minio \ # 配置持久化 -e "MINIO_ROOT_USER=admin" \ # 登录用户名 -e "MINIO_ROOT_PASSWORD=your_strong_password" \ # 登录密码 --restart=always \ minio/minio server /data --console-address ":9090" ``` > 💡 说明: > - 替换`your_strong_password`为高强度密码 > - 数据将永久保存在虚拟机`/minio/data`目录[^1] **(3) 验证部署** ```bash docker ps | grep minio # 应显示运行中的容器 curl http://localhost:9000 # 返回XML响应即成功 ``` #### 3️⃣ **访问控制台** 1. 在虚拟机浏览器访问: ``` http://localhost:9090 ``` 2. 或通过宿主机访问(需配置端口转发): ``` http://<虚拟机IP>:9090 ``` 3. 使用步骤(2)设置的用户名密码登录 #### 4️⃣ **基本使用** - 登录后创建存储桶(Bucket) - 通过API端点`http://<IP>:9000`进行编程访问 - Spring Boot集成示例配置: ```yaml minio: endpoint: http://虚拟机IP:9000 access-key: admin secret-key: your_strong_password bucket: my-bucket ``` #### 5️⃣ **常见问题处理** - **端口冲突**:修改`-p`参数映射端口(如`-p 9001:9000`) - **权限不足**:添加`--user $(id -u):$(id -g)`到docker命令 - **磁盘空间**:确保虚拟机有足够存储(建议预留10GB+) > ⚠️ **安全提示**:生产环境务必修改默认密码,建议使用TLS加密传输[^2] [^1]: MinIO数据持久化通过Docker卷映射实现,确保容器重启后数据不丢失。 [^2]: Docker部署MinIO时可通过`-v`挂载SSL证书目录实现HTTPS访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值