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 上面浏览到,方便大家查阅。

八、参考

相关推荐
功德+n6 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
小敬爱吃饭7 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
木子欢儿7 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
coppher8 小时前
Ubuntu 22.04 amd64 离线安装 Docker 完整教程
linux·docker
虚伪的空想家10 小时前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
SXJR10 小时前
k8s中的Pod
云原生·容器·kubernetes
文静小土豆10 小时前
K8s 滚动更新在 Java 应用中的实践与优化
java·容器·kubernetes
w61001046611 小时前
CKA-2026-Ingress
云原生·容器·kubernetes·cka
bloglin9999911 小时前
docker logs 如何一直监听日志输出
运维·docker·容器
说实话起个名字真难啊12 小时前
Docker 入门之网络基础
网络·docker·php