一、背景
二、新版本变动
[图片:Web 控制台功能阉割示意]
开源社区版本分发调整:
[图片:开源社区版本分发调整]
三、自己动手封装镜像
# 阶段 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:生成最终镜像
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"]
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 的初始化,创建桶等一些操作。
- ⚠️注意:需要先创建一个自定义 docker 网桥;凭证使用
MINIO_ROOT_USER/MINIO_ROOT_PASSWORD。
docker network create -d bridge --subnet "10.22.33.0/24" --gateway "10.22.33.1" srebro
version: "3.8"
services:
minio:
image: minio:minio:RELEASE.2025-10-15T17-29-55Z
container_name: minio
networks:
- srebro
ports:
- 9000:9000
- 9001:9001
volumes:
- ./data:/data
- ./mc-config:/tmp/.mc:rw
- /etc/localtime:/etc/localtime:ro
- /usr/share/zoneinfo:/usr/share/zoneinfo:ro
environment:
MINIO_ROOT_USER: <MINIO_ROOT_USER>
MINIO_ROOT_PASSWORD: <MINIO_ROOT_PASSWORD>
TZ: Asia/Shanghai
command: server /data --console-address :9001
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 10s
timeout:
docker compose up -d
docker compose ps
docker compose logs -f minio
五、Web 控制台阉割功能的替代:使用 mc 命令
上面的容器都内置了 mc 命令,使用一个 JSON 格式的配置文件来存储某些类型的信息,比如为每个配置的 S3 兼容服务设置的别名。mc 的配置文件也都持久化了,可直接使用,管理 minio
docker exec -it minio bash
mc --version
mc alias ls
mc anonymous set public minio/<BUCKET_NAME>
mc anonymous set private minio/<BUCKET_NAME>
- 创建 ACCESS_KEY 和 SECRET_KEY:
mc admin user add minio <ACCESS_KEY> <SECRET_KEY>
mc admin policy attach minio readwrite --user <ACCESS_KEY>
六、MinIO 对象生命周期管理(ILM)配置说明
概念:
- MinIO 的对象生命周期管理(Object Lifecycle Management, ILM)是一项自动化策略引擎,用于根据用户定义的规则自动管理对象的存储状态,包括过期删除、存储类转换(降本)、版本清理等。其核心目标是简化数据全生命周期的成本控制和合规性管理,尤其适用于海量数据存储场景。
- 规则按桶与前缀匹配,控制对象过期与非当前版本(启用版本化后)的清理。
基础规则示例:
mc ilm rule add minio/<BUCKET_NAME> \
--prefix "logs/" \
--expiry-days 30
- 将
logs/ 前缀下对象在 30 天后过期,非当前版本 7 天清理:
mc ilm rule add minio/<BUCKET_NAME> \
--prefix "logs/" \
--expiry-days 30 \
--noncurrent-expire-days 7
mc ilm rule ls minio/<BUCKET_NAME>
mc ilm rule rm minio/<BUCKET_NAME> --id <rule-id>
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/<BUCKET_NAME> ilm.json
mc ilm export minio/<BUCKET_NAME>
七、总结
- 新版本不再提供 Docker 镜像和预编译好的二进制文件,需要大家自行编译与封装镜像。
- Web 控制台功能阉割后,可用
mc 命令完成用户、策略、桶、版本化、ILM 等管理操作。
- 因 CVE-2025-62506,应尽快升级到
RELEASE.2025-10-15T17-29-55Z 或更高版本;通过 Dockerfile 多阶段构建与 Docker Compose 可快速落地与运维。
八、参考