通过 Docker-compose 快速部署 MinIO 保姆级教程

作者:IT资讯 来源:IT资讯 浏览: 【】 发布时间:2025-12-09 16:36:41 评论数:

一、通过概述

MinIO 是速部署一个开源的对象存储服务器  ,它兼容Amazon S3(Simple Storage Service)API。保姆它被设计用于构建分布式存储架构 ,通过提供高可用性 、速部署高性能和可扩展的保姆对象存储解决方案  。

下面是通过MinIO的一些主要特点和功能:

对象存储:MinIO以对象为基本存储单元,可以存储和管理任意大小的速部署文件 、数据对象 。保姆它提供了标准的通过对象存储操作,云计算如上传、速部署下载、保姆删除和元数据管理。通过分布式架构:MinIO采用分布式架构,速部署可以在多个节点上部署,保姆并将数据分布和复制在不同的节点上 。这提供了高可用性和数据冗余,确保数据的持久性和可靠性 。高性能 :MinIO通过并行处理和分布式架构实现高性能的数据存取  。它利用现代硬件和网络技术,充分利用多核处理器和高带宽网络,以实现快速的数据传输和处理。香港云服务器水平扩展 :MinIO可以水平扩展 ,通过添加更多的节点来增加存储容量和吞吐量。它支持自动数据分片和负载均衡,确保数据在各个节点上均匀分布和访问的负载均衡。数据保护 :MinIO提供了多种数据保护机制 ,包括数据冗余 、故障转移和数据校验。它可以在不同的节点之间复制数据,以应对节点故障和数据损坏的情况 。安全性 :MinIO支持数据加密和访问控制 ,保护存储在其中的数据的模板下载安全性和隐私性 。它提供了传输层加密(TLS/SSL)和服务器端加密选项 ,以及身份验证和访问控制机制。

总的来说,MinIO是一个开源的高性能对象存储服务器,适用于构建分布式存储系统  。它具有高可用性、可扩展性和数据保护机制,兼容Amazon S3 API,使其与现有的S3生态系统和工具集成无缝 。MinIO在大数据 、云计算和容器化环境中广泛应用 ,源码库为应用程序提供了可靠 、高效的对象存储服务 。

这里主要侧重使用docker快速部署环境 ,想了解更多,可以参考我以下几篇文章:

高性能分布式对象存储——MinIO(环境部署)高性能分布式对象存储——MinIO实战操作(MinIO扩容)【云原生】Minio on k8s 讲解与实战操作【云原生】镜像仓库Harbor对接MinIO对象存储

官方文档 :https://docs.min.io/中文文档 :http://docs.minio.org.cn/docs/

二、MinIO 与 Ceph 对比

MinIO和Ceph都是流行的开源存储解决方案,它们在对象存储领域有不同的特点和适用场景。下面是MinIO和Ceph的对比:

1)架构设计对比

MinIO:MinIO采用分布式架构 ,以水平扩展为基础。它通过多个独立的服务器租用MinIO节点组成集群,每个节点都是独立的对象存储服务器 。MinIO专注于提供简单、轻量级的对象存储服务 ,适用于小型到中等规模的部署。Ceph :Ceph是一个分布式存储系统 ,由对象存储、块存储和文件系统组成 。它使用RADOS(Reliable Autonomic Distributed Object Store)作为底层存储系统,提供高可用性和数据冗余 。Ceph适用于大规模的源码下载企业级部署,具有复杂的架构和丰富的功能 。

2)数据一致性对比

MinIO :MinIO在默认配置下提供最终一致性,即写入操作返回成功后 ,数据可能会有一定的时间窗口内的延迟才能完全一致 。这适用于许多应用场景 ,如数据备份、存档等  。Ceph :Ceph提供强一致性,即写入操作在返回成功后,数据即刻就达到一致性。这对于需要强一致性保证的应用场景非常重要 ,如数据库和事务处理 。

3)部署和管理对比

MinIO:MinIO 的部署和管理相对简单,可以通过单个二进制文件或容器进行快速安装和配置。它提供了直观的管理界面和易于使用的API,使得管理和监控变得简单。Ceph :Ceph 的部署和管理相对复杂,涉及多个组件和配置 。它需要更多的时间和专业知识来设置和维护 ,需要熟悉Ceph的架构和配置 。

4)生态系统和兼容性对比

MinIO:MinIO与Amazon S3 API兼容 ,这意味着现有的S3工具和应用程序可以无缝地与MinIO集成 。它还有一个活跃的社区,提供了各种客户端库和插件  ,扩展了其功能和兼容性 。Ceph :Ceph 具有广泛的生态系统和丰富的功能集。它可以与多个协议和接口(如RADOS  、RBD  、CephFS)进行集成 ,提供块存储 、文件系统和对象存储的全面解决方案。

综上所述 ,MinIO适用于简单、轻量级的对象存储需求 ,注重高性能和易用性。它适合中小规模部署 ,并且与Amazon S3兼容 ,易于与现有的S3生态系统集成。

Ceph则适用于大规模  、复杂的企业级存储需求 。它提供强一致性和丰富的功能集,适合需要高可用性 、数据冗余和复杂数据操作的场景。Ceph的部署和管理相对复杂 ,需要更多的配置和管理工作 。选择MinIO还是Ceph取决于具体的需求和场景 。如果你需要一个简单 、易用、高性能的对象存储解决方案,并与S3兼容  ,那么MinIO是一个不错的选择 。如果你需要一个功能强大 、可扩展、支持块存储和文件系统的分布式存储系统 ,且具备强一致性的要求 ,那么Ceph是更适合的选择。

无论选择MinIO还是Ceph,都需要仔细评估其与特定应用和环境的兼容性、性能需求 、管理复杂性和可扩展性,以确保选择的解决方案能够满足实际需求并提供可靠的存储服务。

三、前期准备

1)部署 docker

复制# 安装yum-config-manager配置工具 yum -y install yum-utils # 建议使用阿里云yum源:(推荐) #yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装docker-ce版本 yum install -y docker-ce # 启动并开机启动 systemctl enable --now docker docker --version1.2.3.4.5.6.7.8.9.10.11.12.

2)部署 docker-compose

复制curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version1.2.3.4.

四、创建网络

复制# 创建,注意不能使用hadoop_network ,要不然启动hs2服务的时候会有问题!  ! ! docker network create hadoop-network # 查看 docker network ls1.2.3.4.5.

五 、MinIO 编排部署

1)下载 MinIO 安装包

复制wget https://dl.min.io/server/minio/release/linux-amd64/minio1.

2)配置

这里部署的是伪集群,但是需要的磁盘还是那么多,下面就是挂载磁盘的步骤  :

复制### 1、格式化 mkfs.ext4 /dev/sdb mkfs.ext4 /dev/sdc mkfs.ext4 /dev/sdd mkfs.ext4 /dev/sde mkfs.ext4 /dev/sdf mkfs.ext4 /dev/sdg mkfs.ext4 /dev/sdh mkfs.ext4 /dev/sdi mkfs.ext4 /dev/sdj mkfs.ext4 /dev/sdk mkfs.ext4 /dev/sdl mkfs.ext4 /dev/sdm ### 2、创建挂载目录 mkdir /opt/apache/docker-compose-minio/data/minio-node{ 1..3}/data{ 1..4} ### 3、挂载 # minio-node1 mount /dev/sdb /opt/apache/docker-compose-minio/data/minio-node1/data1 mount /dev/sdc /opt/apache/docker-compose-minio/data/minio-node1/data2 mount /dev/sdd /opt/apache/docker-compose-minio/data/minio-node1/data3 mount /dev/sde /opt/apache/docker-compose-minio/data/minio-node1/data4 # minio-node2 mount /dev/sdf /opt/apache/docker-compose-minio/data/minio-node2/data1 mount /dev/sdg /opt/apache/docker-compose-minio/data/minio-node2/data2 mount /dev/sdh /opt/apache/docker-compose-minio/data/minio-node2/data3 mount /dev/sdi /opt/apache/docker-compose-minio/data/minio-node2/data4 # minio-node3 mount /dev/sdj /opt/apache/docker-compose-minio/data/minio-node3/data1 mount /dev/sdk /opt/apache/docker-compose-minio/data/minio-node3/data2 mount /dev/sdl /opt/apache/docker-compose-minio/data/minio-node3/data3 mount /dev/sdm /opt/apache/docker-compose-minio/data/minio-node3/data4 ### 4、持久化配置 # minio-node1 echo "/dev/sdb /opt/apache/docker-compose-minio/data/minio-node1/data1 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sdc /opt/apache/docker-compose-minio/data/minio-node1/data2 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sdd /opt/apache/docker-compose-minio/data/minio-node1/data3 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sde /opt/apache/docker-compose-minio/data/minio-node1/data4 ext4 defaults 0 0" >> /etc/fstab # minio-node2 echo "/dev/sdf /opt/apache/docker-compose-minio/data/minio-node2/data1 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sdg /opt/apache/docker-compose-minio/data/minio-node2/data2 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sdh /opt/apache/docker-compose-minio/data/minio-node2/data3 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sdi /opt/apache/docker-compose-minio/data/minio-node1/data4 ext4 defaults 0 0" >> /etc/fstab # minio-node3 echo "/dev/sdj /opt/apache/docker-compose-minio/data/minio-node3/data1 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sdk /opt/apache/docker-compose-minio/data/minio-node3/data2 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sdl /opt/apache/docker-compose-minio/data/minio-node3/data3 ext4 defaults 0 0" >> /etc/fstab echo "/dev/sdm /opt/apache/docker-compose-minio/data/minio-node3/data4 ext4 defaults 0 0" >> /etc/fstab1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.

3)启动脚本 bootstrap.sh

复制#!/bin/bash source /etc/profile # 在三台机器上都执行该文件,即以分布式的方式启动了MINIO # --address "0.0.0.0:9000" 挂载9001端口为api端口(如Java客户端)访问的端口 # --console-address ":9000" 挂载9000端口为web端口; /opt/apache/minio/minio server --address 0.0.0.0:9000 --console-address 0.0.0.0:9001 --config-dir /etc/minio \ http://minio-node1/opt/apache/minio/data/export1 \ http://minio-node1/opt/apache/minio/data/export2 \ http://minio-node1/opt/apache/minio/data/export3 \ http://minio-node1/opt/apache/minio/data/export4 \ http://minio-node2/opt/apache/minio/data/export1 \ http://minio-node2/opt/apache/minio/data/export2 \ http://minio-node2/opt/apache/minio/data/export3 \ http://minio-node2/opt/apache/minio/data/export4 \ http://minio-node3/opt/apache/minio/data/export1 \ http://minio-node3/opt/apache/minio/data/export2 \ http://minio-node3/opt/apache/minio/data/export3 \ http://minio-node3/opt/apache/minio/data/export4 >/opt/apache/minio/logs/minio_server.log & tail -f /opt/apache/minio/logs/minio_server.log1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.

Minio默认9000端口  ,在配置文件中加入–address “127.0.0.1:9029” 可更改端口

MINIO_ACCESS_KEY :用户名,长度最小是5个字符MINIO_SECRET_KEY:密码 ,密码不能设置过于简单,不然minio会启动失败 ,长度最小是8个字符–config-dir :指定集群配置文件目录–address :api的端口,默认是9000--console-address  :web端口,默认随机

【温馨提示】磁盘大小必须>1G ,这里我添加的是4*2G的盘

4)构建镜像 Dockerfile

复制FROM registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/centos-jdk:7.7.1908 # 创建日志存储目录 RUN mkdir -p /opt/apache/minio/logs # 分别在三个节点上创建存储目录 RUN mkdir -p /opt/apache/minio/data/export{ 1..3} # 创建配置目录 RUN mkdir -p /etc/minio # 账号密码 ENV MINIO_ROOT_USER=admin ENV MINIO_ROOT_PASSWORD=admin123456 # copy minio COPY minio /opt/apache/minio/ # copy minio client mc COPY mc /opt/apache/minio/ RUN ln -s /opt/apache/minio/mc /usr/local/sbin/mc # copy bootstrap.sh COPY bootstrap.sh /opt/apache/ RUN chmod +x /opt/apache/bootstrap.sh WORKDIR /opt/apache1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.

开始构建镜像

复制docker build -t registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 . --no-cache --progress=plain # 为了方便小伙伴下载即可使用 ,我这里将镜像文件推送到阿里云的镜像仓库 docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 ### 参数解释 # -t:指定镜像名称 # . :当前目录Dockerfile # -f:指定Dockerfile路径 # --no-cache :不缓存1.2.3.4.5.6.7.8.9.10.

5)编排 docker-compose.yaml

复制version: 3 services: minio-node1: image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 container_name: minio-node1 hostname: minio-node1 restart: always privileged: true env_file: - .env expose: - "${ MinIO_PORT}" ports: - "${ MinIO_HTTP_PORT}" volumes: - /opt/apache/docker-compose-minio/data/minio-node1/data1:/opt/apache/minio/data/export1 - /opt/apache/docker-compose-minio/data/minio-node1/data2:/opt/apache/minio/data/export2 - /opt/apache/docker-compose-minio/data/minio-node1/data3:/opt/apache/minio/data/export3 - /opt/apache/docker-compose-minio/data/minio-node1/data4:/opt/apache/minio/data/export4 command: ["sh","-c","/opt/apache/bootstrap.sh"] networks: - hadoop-network healthcheck: test: ["CMD-SHELL", "netstat -tnlp|grep :${ MinIO_PORT} || exit 1"] interval: 10s timeout: 10s retries: 5 minio-node2: image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 container_name: minio-node2 hostname: minio-node2 restart: always privileged: true env_file: - .env expose: - "${ MinIO_PORT}" ports: - "${ MinIO_HTTP_PORT}" volumes: - /opt/apache/docker-compose-minio/data/minio-node2/data1:/opt/apache/minio/data/export1 - /opt/apache/docker-compose-minio/data/minio-node2/data2:/opt/apache/minio/data/export2 - /opt/apache/docker-compose-minio/data/minio-node2/data3:/opt/apache/minio/data/export3 - /opt/apache/docker-compose-minio/data/minio-node2/data4:/opt/apache/minio/data/export4 command: ["sh","-c","/opt/apache/bootstrap.sh"] networks: - hadoop-network healthcheck: test: ["CMD-SHELL", "netstat -tnlp|grep :${ MinIO_PORT} || exit 1"] interval: 10s timeout: 10s retries: 5 minio-node3: image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 container_name: minio-node3 hostname: minio-node3 restart: always privileged: true env_file: - .env expose: - "${ MinIO_PORT}" ports: - "${ MinIO_HTTP_PORT}" volumes: - /opt/apache/docker-compose-minio/data/minio-node3/data1:/opt/apache/minio/data/export1 - /opt/apache/docker-compose-minio/data/minio-node3/data2:/opt/apache/minio/data/export2 - /opt/apache/docker-compose-minio/data/minio-node3/data3:/opt/apache/minio/data/export3 - /opt/apache/docker-compose-minio/data/minio-node3/data4:/opt/apache/minio/data/export4 command: ["sh","-c","/opt/apache/bootstrap.sh"] networks: - hadoop-network healthcheck: test: ["CMD-SHELL", "netstat -tnlp|grep :${ MinIO_PORT} || exit 1"] interval: 10s timeout: 10s retries: 5 # 连接外部网络 networks: hadoop-network: external: true1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.

.env 文件内容

复制MinIO_PORT=9000 MinIO_HTTP_PORT=90011.2.

6)开始部署

复制# --project-name指定项目名称 ,默认是当前目录名称 docker-compose -f docker-compose.yaml up -d # 查看 docker-compose -f docker-compose.yaml ps # 卸载 docker-compose -f docker-compose.yaml down1.2.3.4.5.6.7.8.

7)简单测试验证

复制# 登录容器内测试 docker exec -it minio-node1 bash # 登录,密文输入(推荐) [root@minio-node1 apache]# mc config host add minio http://localhost:9000 Enter Access Key: admin Enter Secret Key: 输入密码 Added `minio` successfully. # 查看集群信息 mc admin info minio1.2.3.4.5.6.7.8.9.10.11.

8)web 访问

http://ip:port

复制docker-compose -f docker-compose.yaml ps1.

账号/密码 :admin/admin123456

最近更新