Docker 部署 MinIO 的单机与分布式实践
基础篇:Docker 安装与单机配置
1. 使用 Docker 启动 MinIO
首先,拉取最新的 MinIO 镜像并运行:
docker run -d \
--name minio \
-p 9000:9000 \
-p 9090:9090 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=strongpassword" \
quay.io/minio/minio server /data --console-address ":9090"
- 9000:对象存储 API 端口
- 9090:管理控制台端口
- MINIO_ROOT_USER / MINIO_ROOT_PASSWORD:管理员账号密码
启动后,可以通过 http://服务器IP:9090
打开管理控制台。
2. 配置控制台与资源访问域名
假设你的域名是 example.com
,你可以在 Nginx/Caddy 等反向代理中配置:
- 控制台域名:
minio-console.example.com
→ 反向代理到:9090
- 资源访问域名:
minio.example.com
→ 反向代理到:9000
Nginx 示例配置(仅核心部分):
server {
server_name minio-console.example.com;
location / {
proxy_pass http://127.0.0.1:9090;
}
}
server {
server_name minio.example.com;
location / {
proxy_pass http://127.0.0.1:9000;
}
}
配置好后,就可以通过域名访问 MinIO。
3. 创建桶(Bucket)
登录控制台 → Buckets → Create Bucket,例如:
- Bucket 名:
public-assets
4. 设置桶为公共只读
在 public-assets
桶里,进入 Access Policy,选择 Read Only。
此时,你可以通过类似以下 URL 公共访问文件:
https://minio.example.com/public-assets/filename.png
高级篇:MinIO 分布式多机部署
一、安装
1. 环境准备
假设有 4 台服务器,每台都有独立磁盘 /mnt/data
:
- node1.example.com
- node2.example.com
- node3.example.com
- node4.example.com
确保每台机器:
- 已安装 Docker
- 防火墙放通 9000(API)、9090(控制台)端口
- 时间同步(推荐配置 NTP)
2. 启动分布式集群
在每台机器执行(替换域名/IP):
docker run -d \
--name minio \
-p 9000:9000 \
-p 9090:9090 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=strongpassword" \
quay.io/minio/minio server \
http://node{1...4}.example.com/mnt/data \
--console-address ":9090"
说明:
http://node{1...4}.example.com/mnt/data
会展开为 4 个节点的存储路径- 所有节点需使用相同的
MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
二、配置
1. 域名与负载均衡
生产环境一般需要统一入口,可以通过 Nginx/HAProxy 来代理:
- 资源访问域名:
minio.example.com
(代理 9000) - 控制台域名:
minio-console.example.com
(代理 9090)
Nginx 示例:
upstream minio_api {
server node1.example.com:9000;
server node2.example.com:9000;
server node3.example.com:9000;
server node4.example.com:9000;
}
upstream minio_console {
server node1.example.com:9090;
server node2.example.com:9090;
server node3.example.com:9090;
server node4.example.com:9090;
}
server {
server_name minio.example.com;
location / {
proxy_pass http://minio_api;
}
}
server {
server_name minio-console.example.com;
location / {
proxy_pass http://minio_console;
}
}
2. 创建桶(Bucket)
通过控制台访问 https://minio-console.example.com
,使用 admin 登录后创建桶,例如:
- 桶名:
assets
3. 设置访问策略
如果需要对外公开只读访问:
进入 assets
桶 → Access Policy → 设置为 Read Only。
此时外部访问链接示例:
https://minio.example.com/assets/logo.png
三、使用
1. 客户端上传文件
可以通过 MinIO 提供的 mc
客户端:
# 安装 mc (Mac/Linux)
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc && mv mc /usr/local/bin/
# 配置 MinIO 连接
mc alias set myminio https://minio.example.com admin strongpassword
# 上传文件
mc cp ./logo.png myminio/assets/
2. 数据分布存储方式
MinIO 使用 Erasure Coding(纠删码),文件会被切分成数据块 + 校验块,分散存储在不同节点:
- 如果是 4 节点,通常是 2 数据 + 2 校验
- 上传的
logo.png
会被分成 4 份,分别存放在不同节点
3. 节点故障时的数据安全
- 单节点宕机:仍然可正常读写,数据自动从校验块恢复
- 两节点同时宕机:只要冗余足够,依然可用
- 超过容错范围:部分数据可能丢失
4. 扩容
- MinIO 支持 横向扩容,通过新增一组节点(称为 Pool)
- 新写入的数据会分布到所有 Pool 中,老数据保持在原 Pool
- ❌ 不支持直接缩容(删除节点),需要重新部署并迁移数据
版权声明:本文为原创文章,版权归 全栈开发技术博客 所有。
本文链接:https://www.lvtao.net/system/docker-minio-deploy-guide.html
转载时须注明出处及本声明