3. MinIO 环境搭建:Docker 部署与基础操作
MinIO 是高性能、S3 兼容的对象存储系统,适合作为 Go 对象存储边界发布与回滚的底层存储引擎。本章使用 Docker 快速搭建 MinIO 单节点环境,并完成控制台基础操作:创建桶、上传对象、设置访问策略。
3.1 使用 Docker 部署 MinIO 单节点
单节点部署适用于开发测试与课程实验。以下命令启动一个 MinIO 容器,同时暴露 API 端口(9000)与控制台端口(9001)。
docker run -d \
--name minio-single \
-p 9000:9000 \
-p 9001:9001 \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=admin123 \
-v /data/minio:/data \
quay.io/minio/minio server /data --console-address ":9001"
参数说明:
-p 9000:9000:S3 兼容 API 端口,Go SDK 通过此端口连接。-p 9001:9001:Web 控制台端口,浏览器访问管理界面。MINIO_ROOT_USER / MINIO_ROOT_PASSWORD:管理员凭据,生产环境应使用强密码。-v /data/minio:/data:持久化数据卷,容器重启后数据不丢失。
启动后验证容器状态:
docker ps | grep minio-single
浏览器访问 http://localhost:9001,使用 admin / admin123 登录 MinIO 控制台。
3.2 MinIO 控制台基础操作
控制台提供可视化的桶管理、对象浏览、访问策略配置和监控面板。以下为登录后的核心界面区域:
| 区域 | 功能 | 操作入口 |
|---|---|---|
| 左侧导航栏 | 桶列表、对象浏览器、身份管理、监控 | 点击图标切换 |
| 桶列表页 | 显示所有桶名称、大小、对象数量、创建时间 | 默认首页 |
| 对象浏览器 | 进入桶后浏览/上传/下载/删除对象 | 点击桶名称 |
| 访问策略 | 为桶或用户设置读写权限(ReadOnly / ReadWrite / Private) | 桶设置 → Access Policy |
| 身份管理 | 创建服务账号、配置策略、管理用户组 | 左侧 Identity |
安全提示: 控制台默认使用 HTTP,生产环境应配置 TLS 证书。开发阶段如需远程访问,建议通过 SSH 隧道或 VPN,避免将 9001 端口直接暴露在公网。
3.3 创建桶与上传对象
桶(Bucket)是对象存储的逻辑容器,类似于文件系统的目录。以下通过控制台完成桶创建与对象上传。
步骤 1:创建桶
- 登录控制台后,点击左侧 Buckets → 右上角 Create Bucket。
- 输入桶名称(全局唯一,仅支持小写字母、数字、短横线,例如
go-release-artifacts)。 - 选择版本控制(Versioning):课程实验建议开启,便于后续回滚演示。
- 点击 Create 完成。
步骤 2:上传对象
- 在桶列表页点击刚创建的桶名称,进入对象浏览器。
- 点击 Upload → Upload File。
- 选择本地文件(例如
release-v1.0.0.tar.gz),上传后自动显示在对象列表中。 - 点击对象右侧的 ... → Share 可生成预签名 URL(临时下载链接)。
步骤 3:设置桶访问策略(可选)
若需要公开读取桶内对象(例如静态资源分发),可在桶设置中修改 Access Policy:
- Private:仅拥有者读写(默认)。
- ReadOnly:允许匿名读取对象列表与下载。
- ReadWrite:允许匿名上传与删除(高风险,谨慎使用)。
实验建议: 课程后续章节将使用 Go SDK 操作 MinIO,建议在控制台先手动创建 2~3 个桶(如
go-release-artifacts、go-rollback-snapshots、go-temp-staging),并上传几个不同版本的对象文件,为边界发布与回滚测试准备数据。
3.4 MinIO 单节点架构示意
下图展示 Docker 部署的 MinIO 单节点内部组件关系:API 网关接收 S3 请求,控制台提供 Web 管理,数据写入本地卷持久化。
3.5 验证部署:使用 mc 客户端(可选)
MinIO 官方命令行工具 mc 可快速验证 API 连通性:
# 在宿主机安装 mc(或使用 Docker 镜像)
docker run --rm --net=host quay.io/minio/mc alias set local http://localhost:9000 admin admin123
# 列出所有桶
docker run --rm --net=host quay.io/minio/mc ls local
# 创建桶
docker run --rm --net=host quay.io/minio/mc mb local/go-release-artifacts
# 上传文件
docker run --rm --net=host -v /tmp:/tmp quay.io/minio/mc cp /tmp/test.txt local/go-release-artifacts/
mc 优势: 无需登录控制台即可完成桶与对象管理,适合脚本化批量操作。课程后续章节将使用 Go SDK 替代 mc,实现程序化对象存储管理。
3.6 常见问题与排查
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 控制台无法访问 | 端口映射错误或防火墙拦截 | 检查 docker ps 端口映射;宿主机防火墙放行 9001 |
| API 连接被拒绝 | MinIO 未启动或端口冲突 | docker logs minio-single 查看启动日志 |
| 上传文件失败 | 桶不存在或权限不足 | 确认桶名称正确;检查 Access Policy 是否为 Private |
| 数据卷权限错误 | 宿主机目录权限不足 | chmod 777 /data/minio 或使用 Docker 卷驱动 |