Docker 安装 MinIO 的教程

MinIO 是一个开源的对象存储服务,与 Amazon S3 兼容,常用于本地开发、测试或小型部署。它支持通过 Docker 快速安装和运行。本教程基于官方和社区资源总结,包括一键启动命令、端口自定义(使用 3000 以上端口)、Python 测试连接,以及常见问题解决。教程假设你已在本地或远程服务器(如 IP 为 117.72.56.34 的机器)上安装了 Docker。如果未安装 Docker,请参考官方文档安装。

先决条件

  • 已安装 Docker(版本 20.x 或更高)。检查:docker --version
  • 服务器有足够的存储空间,用于数据卷。
  • Python 环境(用于测试),并安装 minio 库:pip install minio

步骤 1: 运行 MinIO 容器

使用 Docker 拉取并运行 MinIO 镜像。以下是一个一键命令示例,用于单节点部署。将 /path/to/your/data 替换为实际的数据存储路径(如 /data/minio)。为安全起见,使用自定义用户名和密码,但示例中使用默认 minioadmin

基本命令:

docker run -d -p 9000:9000 -p 9001:9001 --name minio \
  -e "MINIO_ROOT_USER=minioadmin" \
  -e "MINIO_ROOT_PASSWORD=minioadmin" \
  -v /path/to/your/data:/data \
  minio/minio server /data --console-address ":9001"
  • -d:后台运行。
  • -p:端口映射(主机端口:容器端口)。
  • -e:环境变量设置根用户和密码。
  • -v:数据卷挂载,确保数据持久化。
  • --console-address:指定控制台端口。

运行后,检查容器状态:docker ps。访问控制台:http://localhost:9001(使用用户名和密码登录)。API 端点:http://localhost:9000

自定义端口(使用 3000 以上)

如果默认端口被占用,修改为主机端口 3001(API)和 3002(控制台):

docker run -d -p 3001:9000 -p 3002:9001 --name minio \
  -e "MINIO_ROOT_USER=minioadmin" \
  -e "MINIO_ROOT_PASSWORD=minioadmin" \
  -v /path/to/your/data:/data \
  minio/minio server /data --console-address ":9001"

确保防火墙允许这些端口(如 ufw allow 3001ufw allow 3002)。

步骤 2: 使用 Docker Compose(可选,推荐生产环境)

创建 docker-compose.yml 文件:

version: '3.8'
services:
  minio:
    image: minio/minio
    container_name: minio
    ports:
      - "3001:9000"
      - "3002:9001"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    volumes:
      - /path/to/your/data:/data
    command: server /data --console-address ":9001"

运行:docker-compose up -d。停止:docker-compose down

步骤 3: 测试连接

使用 Python 的 MinIO SDK 验证连接。创建文件 test_minio.py(避免命名为 minio.py 以防冲突)。

from minio import Minio
from minio.error import S3Error

endpoint = '117.72.56.34:3001'  # 或 'localhost:3001'
access_key = 'minioadmin'
secret_key = 'minioadmin'

client = Minio(endpoint,
               access_key=access_key,
               secret_key=secret_key,
               secure=False)  # 如果 HTTPS,设为 True

try:
    buckets = client.list_buckets()
    print("连接成功!现有桶列表:")
    for bucket in buckets:
        print(bucket.name)
except S3Error as err:
    print(f"连接失败:{err}")
except Exception as e:
    print(f"发生错误:{e}")

运行:python test_minio.py。如果成功,会列出桶列表。

步骤 4: 基本使用

  • 创建桶:在控制台或 SDK 中创建。
  • 上传/下载文件:使用 MinIO 客户端 mc(安装:下载二进制或 brew install minio/stable/mc),配置:mc alias set myminio http://117.72.56.34:3001 minioadmin minioadmin
  • 更多操作:参考官方文档。

故障排除

  • 端口冲突:使用 netstatdocker ps 检查,修改端口。
  • 数据持久化:确保卷路径存在且有权限(mkdir -p /path/to/your/data)。
  • Python 导入错误:如果 “cannot import name ‘Minio’”,重命名脚本并重试。
  • 远程访问:使用 IP,确保防火墙开放。生产环境启用 HTTPS。
  • 日志检查docker logs minio

对于高级配置,如分布式模式,参考官方文档。

写文章用