MinIO 新版本 Docker 部署指南:告别 Web 控制台,拥抱 CLI 管理

一、背景

二、新版本变动

  • Web 控制台功能阉割:

    • 开源社区版本,内置 Web 管理界面不再提供除了创建bucket以外的功能。👆上面的图是不是很干净😄
  • 开源社区版本分发调整:

    • 官方不再提供Docker镜像与预编译二进制,需要自行从源码编译并封装镜像。
    • 推荐部署路径:源码构建 + 自制 Docker 镜像 + Docker Compose 编排。

三、自己动手封装镜像

dockerfile 复制代码
# 阶段1:依赖下载层
FROM golang:1.24.11-alpine3.23 AS builder

# 定义MINIO版本
ARG MINIO_VERSION=RELEASE.2025-10-15T17-29-55Z

WORKDIR /app

# 下载minio并构建二进制文件
RUN wget https://github.com/minio/minio/archive/refs/tags/${MINIO_VERSION}.tar.gz \
&& tar -zxvf ${MINIO_VERSION}.tar.gz \
&& rm -rf ${MINIO_VERSION}.tar.gz \
&& export GOPROXY=https://mirrors.cloud.tencent.com/go/ \
&& cd minio-${MINIO_VERSION} \
&& go mod tidy \
&& go build

# 阶段2:生成最终镜像
#官方的 minio 镜像自带了 mc 命令
FROM minio/minio:latest

# 定义MINIO版本
ARG MINIO_VERSION=RELEASE.2025-10-15T17-29-55Z

COPY --from=builder /app/minio-${MINIO_VERSION}/minio /usr/bin/minio
COPY --from=builder /app/minio-${MINIO_VERSION}/dockerscripts/docker-entrypoint.sh /usr/bin/docker-entrypoint.sh

RUN chmod -R 777 /usr/bin && chmod +x /usr/bin/docker-entrypoint.sh

ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
VOLUME ["/data"]
CMD ["minio"]
  • 构建命令:
bash 复制代码
MINIO_VERSION=RELEASE.2025-10-15T17-29-55Z
docker build -t minio:${MINIO_VERSION} --build-arg MINIO_VERSION=${MINIO_VERSION} .

四、使用 Docker Compose 快速运行MinIO

  • 目标:配置环境变量、数据卷与健康检查,快速启动单实例。

  • 初始化: 运行了一个 minio-init 容器,用于 minio 的初始化,创建桶等一些操作。

  • ⚠️注意:需要先创建一个 srebro 的docker 网桥;凭证使用 MINIO_ROOT_USER/MINIO_ROOT_PASSWORD

    #创建docker 自定义网桥
    docker network create -d bridge --subnet "10.22.33.0/24" --gateway "10.22.33.1" srebro

yaml 复制代码
version: "3.8"
services:
  minio:
    image: docker.cnb.cool/srebro/docker-images/minio:RELEASE.2025-10-15T17-29-55Z  #CNB镜像托管了一个
    # 如果本地构建镜像,用 build 指令替代 image:
    # build:
    #   context: .
    #   dockerfile: Dockerfile
    container_name: minio
    networks:
      - srebro
    ports:
      - 9000:9000
      - 9001:9001
    volumes:
      - /home/application/Middleware/minio/data:/data  #挂载 minio 数据盘
      - /home/application/Middleware/minio/mc-config:/tmp/.mc:rw #持久化 mc 配置文件
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo:/usr/share/zoneinfo:ro
    environment:
      MINIO_ROOT_USER: srebro
      MINIO_ROOT_PASSWORD: 'password'
      TZ: Asia/Shanghai
    command: server /data --console-address :9001    
    healthcheck:  # 健康检查确保初始化服务在MinIO就绪后运行
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 10s
      timeout: 5s
      retries: 10
    restart: unless-stopped

  minio-init:
    image: docker.cnb.cool/srebro/docker-images/minio:RELEASE.2025-10-15T17-29-55Z
    container_name: minio-init
    depends_on:
      minio:
        condition: service_healthy  # 依赖MinIO健康状态
    networks:
      - srebro
    volumes:
      - /home/application/Middleware/minio/mc-config:/tmp/.mc:rw
    entrypoint: >
      /bin/sh -c "
      /usr/bin/mc alias set minio http://minio:9000 srebro 'password';
      /usr/bin/mc mb minio/srebro;
      /usr/bin/mc ls minio;
      exit 0;
      "
networks:
  srebro:
    external: true
  • 启动与查看:
bash 复制代码
docker compose up -d
docker compose ps
docker compose logs -f minio

五、Web 控制台阉割功能的替代:使用 mc 命令

上面的容器都内置了 mc命令,使用一个 JSON 格式的配置文件来存储 某些类型的信息,比如为每个配置的 S3 兼容服务 设置的 别名。 mc 的配置文件也都持久化了,可直接使用,管理 minio

  • 登陆容器,运行 mc 命令

    docker exec -it minio bash

    mc --version

    mc version RELEASE.2025-08-13T08-35-41Z (commit-id=7394ce0dd2a80935aded936b09fa12cbb3cb8096)
    Runtime: go1.24.6 linux/amd64
    Copyright (c) 2015-2025 MinIO, Inc.
    License GNU AGPLv3 https://www.gnu.org/licenses/agpl-3.0.html

  • 查看mc 配置

    mc alias ls

    gcs
    URL : https://storage.googleapis.com
    AccessKey : YOUR-ACCESS-KEY-HERE
    SecretKey : YOUR-SECRET-KEY-HERE
    API : S3v2
    Path : dns
    Src : /tmp/.mc/config.json

    local
    URL : http://localhost:9000
    AccessKey :
    SecretKey :
    API :
    Path : auto
    Src : /tmp/.mc/config.json

    minio
    URL : http://minio:9000
    AccessKey : srebro
    SecretKey : password
    API : s3v4
    Path : auto
    Src : /tmp/.mc/config.json

    s3
    URL : https://s3.amazonaws.com
    AccessKey : YOUR-ACCESS-KEY-HERE
    SecretKey : YOUR-SECRET-KEY-HERE
    API : S3v4
    Path : dns
    Src : /tmp/.mc/config.json

  • bucket 管理:

bash 复制代码
# mc mb minio/srebro                 		      # 创建bucket
# mc ls minio                                 # 列出bucket
# mc rb minio/srebro-test --force             # 强制删除bucket,即使含有文件
  • object 文件管理:
bash 复制代码
# echo "This is my test file!" > srebro.txt
# mc cp srebro.txt minio/srebro/srebro.txt                     # 上传测试文件

# mkdir testdir                                                # 创建测试目录
# echo "This is my test02 file!" > testdir/test02.txt
# mc cp testdir minio/srebro --recursive                   # 上传测试目录,且递归上传该目录下的所有文件
# mc ls minio/srebro                                       # 查看minio存储

# mkdir download
# mc cp minio/srebro/test01.txt download/                      # 下载文件
# mc cp minio/srebro/testdir download/ --recursive             # 下载目录,且递归下载

# mc rm minio/srebro/test01.txt                                # 删除文件
# mc rm minio/srebro/testdir --recursive --force               # 删除目录,即使包含文件
# mc ls minio/srebro                                           # 查看minio存储
  • 桶匿名策略(公开/私有):
bash 复制代码
mc anonymous set public minio/srebro
mc anonymous set private minio/srebro
  • 创建 ACCESS_KEY 和 SECRET_KEY:
bash 复制代码
#创建 ACCESS_KEY 和 SECRET_KEY
mc admin user add minio 11fz7gXVnNjvjEDq2qez jj6r9Hu2gtueIQFSV35FzKcvGtK1G61d9ieNmKDg
#修改用户权限
mc admin policy attach minio readwrite --user 11fz7gXVnNjvjEDq2qez

六、MinIO 对象生命周期管理(ILM)配置说明

概念:

  • MinIO 的对象生命周期管理(Object Lifecycle Management, ILM)是一项自动化策略引擎,用于根据用户定义的规则自动管理对象的存储状态,包括过期删除、存储类转换(降本)、版本清理等。其核心目标是简化数据全生命周期的成本控制和合规性管理,尤其适用于海量数据存储场景。
  • 规则按桶与前缀匹配,控制对象过期与非当前版本(启用版本化后)的清理。

基础规则示例:

  • logs/ 前缀下对象在 30 天后过期

    mc ilm rule add minio/srebro
    --prefix "logs/"
    --expiry-days 30

  • logs/ 前缀下对象在 30 天后过期,非当前版本 7 天清理:

bash 复制代码
mc ilm rule add minio/srebro \
  --prefix "logs/" \
  --expiry-days 30 \
  --noncurrent-expire-days 7
  • 查看与删除规则:
bash 复制代码
mc ilm rule ls minio/srebro
mc ilm rule rm minio/srebro --id <rule-id>
  • 按 JSON 导入(便于审计与版本管理):
bash 复制代码
cat > ilm.json <<'EOF'
{
  "Rules": [
    {
      "ID": "expire-logs-30d",
      "Status": "Enabled",
      "Filter": { "Prefix": "logs/" },
      "Expiration": { "Days": 30 },
      "NoncurrentVersionExpiration": { "NoncurrentDays": 7 }
    }
  ]
}
EOF

mc ilm import minio/srebro ilm.json
mc ilm export minio/srebro

七、总结

  • 新版本不再提供 Docker 镜像和预编译好的二进制文件,需要大家自行编译与封装镜像。
  • Web 控制台功能阉割后,可用 mc 命令完成用户、策略、桶、版本化、ILM 等管理操作。
  • 因 CVE-2025-62506,应尽快升级到 RELEASE.2025-10-15T17-29-55Z 或更高版本;通过 Dockerfile 多阶段构建与 Docker Compose 可快速落地与运维。
  • 本文所涉及的文件,都可以在 https://cnb.cool/srebro/docker-images/-/tree/main/Middleware/minio 上面浏览到,方便大家查阅。

八、参考

相关推荐
令狐少侠20112 小时前
docker基本操作 部署启动nginx
nginx·docker·容器
攀小黑3 小时前
docker 部署rabbitmq消息队列并安装延迟队列插件
docker·容器·rabbitmq
虚神界熊孩儿4 小时前
Linux下修改docker和harbor默认网段的方法
linux·docker·harbor
木叶子---4 小时前
Docker
运维·docker·容器
Cyber4K5 小时前
【Kubernetes专项】K8s集群1.31版本安装手册
linux·docker·云原生·容器·kubernetes
凯子坚持 c5 小时前
基于Docker的SD-WAN组网方案:利用节点小宝实现服务器远程开发
服务器·docker·容器
不做菜鸟的网工6 小时前
使用docker部署Speedtest-X内网测试网站
docker
❀͜͡傀儡师7 小时前
docker部署Apache Answer 一款高效问答平台
docker·容器·apache
C_心欲无痕8 小时前
Docker 核心概念和安装
运维·docker·容器