Docker Compose 部署 MinIO
MinIO 是一个高性能、开源的对象存储服务器,兼容 Amazon S3 API。使用 Docker Compose 可以轻松部署 MinIO 服务,无论是单机版还是集群模式。下面将详细介绍各种部署方案。
1. 单机版基础部署
1.1 基本配置
最简单的单机版 MinIO 部署只需要一个服务定义:
yaml
version: "3"
services:
minio:
image: minio/minio:latest
container_name: minio
ports:
- "9000:9000" # API端口
- "9001:9001" # 控制台端口
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=admin123
- TZ=Asia/Shanghai
volumes:
- ./data:/data
command: server /data --console-address ":9001"
restart: unless-stopped
这个配置会:
- 使用最新版 MinIO 镜像
- 映射 9000(API)和 9001(控制台)端口
- 设置管理员账号密码
- 挂载数据目录到本地
./data
1.2 启动服务
bash
docker-compose up -d
启动后可以通过http://localhost:9001
访问控制台,使用设置的用户名密码登录
2. 生产环境优化配置
2.1 资源限制与健康检查
yaml
services:
minio:
# ...其他配置
deploy:
resources:
limits:
cpus: "0.5"
memory: 512M
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
这个配置添加了 CPU/内存限制和健康检查
2.2 日志管理
yaml
logging:
driver: "json-file"
options:
max-size: "100m"
限制日志文件大小,防止日志占用过多磁盘空间
3. 集群部署方案
3.1 分布式 MinIO 集群
要部署分布式 MinIO 集群,需要至少 4 个节点:
yaml
version: "3.7"
services:
minio1:
image: minio/minio
hostname: minio1
ports:
- "9001:9001"
volumes:
- ./data/data1:/data
command: server http://minio{1...4}/data --console-address ":9001"
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=admin123
minio2:
# 类似minio1的配置
# ...
minio3:
# ...
minio4:
# ...
nginx:
image: nginx:alpine
ports:
- "9000:9000"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- minio1
- minio2
- minio3
- minio4
这个配置使用 Nginx 作为负载均衡器,将请求分发到 4 个 MinIO 节点
4. 安全加固建议
4.1 密码安全
- 使用强密码替换默认密码
- 通过环境变量文件管理敏感信息:
bash
echo 'MINIO_ROOT_PASSWORD=ComplexP@ssw0rd!' > .env
然后在 docker-compose.yml 中引用:
yaml
environment:
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
4.2 网络隔离
yaml
networks:
minio-net:
driver: bridge
internal: true
限制 MinIO 服务只能在内部网络访问
5. 常见问题解决
控制台无法访问:
- 检查防火墙是否开放 9001 端口
- 确认容器是否正常运行:
docker-compose ps
客户端连接超时:
- 确认 API 端口 9000 已开放
- 检查网络策略是否允许访问
密码遗忘:
- 停止容器后临时启动并重置密码:bash根据提示输入新密码
docker run -it --rm minio/minio server /data --console-address ":9001"
- 停止容器后临时启动并重置密码:
6. 与 Spring Boot 集成
在 Spring Boot 项目中可以通过 MinIO Java SDK 集成:
- 添加依赖:
xml
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.0</version>
</dependency>
- 配置 MinIO 客户端:
java
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
.endpoint("http://minio:9000")
.credentials("accessKey", "secretKey")
.build();
}
通过以上配置,你可以根据需求选择适合的 MinIO 部署方案,从简单的单机测试环境到高可用的生产集群。