Docker:docker部署Minio服务并创建访问密钥

前言

Minio 是一个基于Apache License v2.0开源协议的对象存储服务,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等;最重要的是免费!!!

镜像下载

查询镜像

docker search minio

这里我选的是 bitnami/minio:2024.7.4 版本的镜像。

下载镜像

docker pull bitnami/minio:2024.7.4

 

 构建容器

创建挂载目录

创建存放配置和存储数据的目录,用于将容器内的数据挂载到宿主机

## 创建存放minio配置文件的目录
mkdir -p /home/minio/config
## 创建存放minio存储数据的目录
mkdir -p /home/minio/data

映射目录赋权

# 一定要把文件夹都先创建好,不然容器启动后容器创建的用户组和权限都会是root,而不是1001,导致启动失败
# 赋权
chown -R 1001:1001 /home/minio

普通命令构建

docker run \
-p 9000:9000 \
-p 9010:9001 \
--net=host \
--name minio \
-td --restart always \
--privileged=true \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /etc/localtime:/etc/localtime:ro \
-v /home/minio/data:/bitnami/minio/data \
-v /home/minio/config:/root/.minio \
 bitnami/minio:2024.7.4
命令 说明
-p 9000:9000 这是minio的API接口端口映射
-p 9010:9001 这是minio的客户端浏览器页面访问端口映射,由于9001与mqtt服务的端口冲突,所以这里使用9010做的映射
--net=host 这是网络设置,表示容器将使用主机的网络栈
--name minio 自定义容器名称
-d --restart=always -d 使容器在后台运行,–restart=always 表示容器总是会在退出后自动重启
-e "MINIO_ROOT_USER=minio"  设置用户名
-e "MINIO_ROOT_PASSWORD=minioadmin"  设置密码,密码长度最少8位,否则会报错!!!!!
-v /etc/localtime:/etc/localtime:ro 同步宿主机的时间
-v /home/minio/data:/bitnami/minio/data  映射minio存储的数据文件到宿主机目录
-v /home/minio/config:/root/.minio  映射minio的配置文件到宿主机目录

Docker-Compose命令构建

version: "3.8"
networks:
  my_net:
    name: my_net
    ipam:
      config:
        - subnet: 172.19.8.0/24
services:
  minio:
    container_name: my-minio
    image: bitnami/minio:2024.7.4
    restart: always
    privileged: true
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minioadmin
    ports:
      - 9000:9000
      - 9010:9001
    networks:
      my_net:
        ipv4_address: 172.19.8.106
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /home/minio/data:/bitnami/minio/data
##      # 防止Minio随机占用端口,指定端口9001为页面显示,9000为API接口,以此启动Minio
##    command: ["server", "/bitnami/minio/data", "--console-address", ":9001", "-address", ":9000"]

访问页面

访问:http://127.0.0.1:9010  用户名:minio  密码:minioadmin

创建用户

创建用户

创建用户组

用户组就是用于管理用户的群组

创建存储桶

存储桶可以理解为就是存储我们文件的空间

点击新建的存储桶,修改Access Policy的访问策略。

创建Access Keys

创建minio的API接口访问密钥

记得保存好生成的密钥信息,编写代码访问minio的API接口使用的就是这个密钥对

指定桶创建权限策略赋予指定用户可操作

创建桶

image

image

创建Minio登录用户的策略

image

image

方案一:整个桶的访问操作权限

{
  "Version": "2012-10-17",
  "Statement": [
     {
          "Effect": "Deny",
          "Action": [    // 这里是对桶的增删改权限,记得把所有注释清掉,不然会报错格式错误
              "admin:CreateServiceAccount", // 这里的配置是禁用Access Keys创建删除的功能,记得把所有注释清掉,不然会报错格式错误
              "admin:RemoveServiceAccount",
              "admin:UpdateServiceAccount"
          ],
          "Resource": [
              "arn:aws:s3:::*"
          ]
      },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": [    // 这里是桶信息查询的权限,记得把所有注释清掉,不然会报错格式错误
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:ListBucketVersions"
      ],
      "Resource": "arn:aws:s3:::bioinfo-backet" // 这里改成自己的存储桶名称,记得把所有注释清掉,不然会报错格式错误
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": [    // 这是对桶内文件的增删改查权限,记得把所有注释清掉,不然会报错格式错误
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:AbortMultipartUpload",
        "s3:ListMultipartUploadParts"
      ],
      "Resource": "arn:aws:s3:::bioinfo-backet/*" // 这里改成自己的存储桶名称,记得把所有注释清掉,不然会报错格式错误
    }
  ]
}

方案二:桶内某个目录的访问操作权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation"    // 可以查看到桶的权限,记得把所有注释清掉,不然会报错格式错误
            ],
            "Resource": [
                "arn:aws:s3:::jaas-bioinfo"    // 可以查看哪个桶,记得把所有注释清掉,不然会报错格式错误
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"    // 可以预览桶内容的权限,记得把所有注释清掉,不然会报错格式错误
            ],
            "Resource": [
                "arn:aws:s3:::jaas-bioinfo"    // 哪个桶,记得把所有注释清掉,不然会报错格式错误
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [    // 配置目录前缀,记得把所有注释清掉,不然会报错格式错误
                        "bioinfo_tools/*"    // 只能预览这个前缀的目录下所有文件,记得把所有注释清掉,不然会报错格式错误
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [    // 可以对文件的各种增删改查权限,记得把所有注释清掉,不然会报错格式错误
                "s3:ListMultipartUploadParts",
                "s3:PutObject",
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::jaas-bioinfo/bioinfo_tools/*"    // 这些权限具体可以操作哪个目录,记得把所有注释清掉,不然会报错格式错误
            ]
        }
    ]
}

创建API调用的策略

image

image

方案一:整个桶的访问操作权限

{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Effect": "Allow",
   "Action": [
    "admin:*"
   ]
  },
  {
   "Effect": "Allow",
   "Action": [
    "kms:*"
   ]
  },
  {
   "Effect": "Allow",
   "Action": [
    "s3:ListBucket",
    "s3:ListBucketMultipartUploads",
    "s3:GetBucketLocation"
   ],
   "Resource": [
    "arn:aws:s3:::bioinfo-backet" // 这里改成自己的存储桶名称,然后把这个注释清掉,不然会报错格式错误
   ]
  },
  {
   "Effect": "Allow",
   "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:GetObject",
    "s3:ListMultipartUploadParts",
    "s3:PutObject"
   ],
   "Resource": [
    "arn:aws:s3:::bioinfo-backet/*" // 这里改成自己的存储桶名称,然后把这个注释清掉,不然会报错格式错误
   ]
  }
 ]
}

创建用户

image

image

 

至此,部署及操作完成!

posted @ 2024-07-11 08:52  怒吼的萝卜  阅读(5007)  评论(4)    收藏  举报