Skip to content

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. 常见问题解决

  1. 控制台无法访问

    • 检查防火墙是否开放 9001 端口
    • 确认容器是否正常运行:docker-compose ps
  2. 客户端连接超时

    • 确认 API 端口 9000 已开放
    • 检查网络策略是否允许访问
  3. 密码遗忘

    • 停止容器后临时启动并重置密码:
      bash
      docker run -it --rm minio/minio server /data --console-address ":9001"
      根据提示输入新密码

6. 与 Spring Boot 集成

在 Spring Boot 项目中可以通过 MinIO Java SDK 集成:

  1. 添加依赖:
xml
<dependency>
  <groupId>io.minio</groupId>
  <artifactId>minio</artifactId>
  <version>8.4.0</version>
</dependency>
  1. 配置 MinIO 客户端:
java
@Bean
public MinioClient minioClient() {
    return MinioClient.builder()
        .endpoint("http://minio:9000")
        .credentials("accessKey", "secretKey")
        .build();
}

通过以上配置,你可以根据需求选择适合的 MinIO 部署方案,从简单的单机测试环境到高可用的生产集群。