Docker compose部署minio服务

目录
  • 介绍
  • 单机版部署
  • 纠删码模式部署
  • 分布式部署

介绍

最近才知道minio这个对象存储服务中间件,简直相见恨晚,只怪我见识太短浅(哭泣脸)。

说得通俗易懂点,minio的作用就是用来存储文件的,比如图片、视频、音频等各种类型的文件。

那么问题来了,java本身就可以直接把文件写到磁盘里面,为什么还要用minio呢?

  • minio有完善的文件管理功能,包括针对文件的上传,下载,删除等
  • minio有强大的纠删功能,即便磁盘损坏,在一定程度上时可以避免丢失文件的
  • minio有完善的权限管理功能,它可以针对不同的业务角色,分配不同的操作权限
  • 天然的分布式存储功能
  • 高性能;在标准硬件上,对象存储的读/写速度最高可以高达183 GB/s和171 GB/s
  • 文档全面,简单易用

所以综上所述,相较于其他的文件存储方案,minio的竞争力还是很大的。下面附上官网链接

单机版部署

一般为了简单集成minio client,我们会自己部署一个单机版的先用用。现在我们开始,讲解一下如何快速部署一个单机版minio服务:

version: "3.7"
services:
  minio:
    image: "quay.io/minio/minio:RELEASE.2022-08-02T23-59-16Z"
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - "./minio/data1:/data1"
      - "./minio/data2:/data2"
    command: server --console-address ":9001" http://minio/data{1...2}
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=12345678
      #- MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE
      #- MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

以上需要注意的几个点:

  • 需要暴露的端口有两个,一个是API暴露端口9000,一个是服务管理页面暴露端口9001。启动成功后,访问9001端口即可进入管理页面。
  • 单机版部署也可挂载多个磁盘,单个服务挂载超过(等于)4个磁盘,自动启动纠删码模式,可以预防磁盘损坏的情况下,导致文件丢失。
  • 最新版本里面已经不使用MINIO_ACCESS_KEY和MINIO_SECRET_KEY两个环境变量了,改由MINIO_ROOT_USER和MINIO_ROOT_PASSWORD替换。
  • 启动命令中--console-address代表指定服务管理页面暴露的端口,http://minio/data{1...2}代表指定的minio服务下面挂载的目标磁盘为/data1和/data2,否则磁盘挂载不起作用。API暴露端口可通过参数--address指定。

纠删码模式部署

为了启动纠删码模式,我们需要在部署的服务上挂载至少4块磁盘:

version: "3.7"
services:
  minio:
    image: "quay.io/minio/minio:RELEASE.2022-08-02T23-59-16Z"
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - "./minio/data1:/data1"
      - "./minio/data2:/data2"
      - "./minio/data3:/data3"
      - "./minio/data4:/data4"
    command: server --console-address ":9001" http://minio/data{1...4}
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=12345678
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

在单机模式部署的情况下,调整为纠删码模式,我们需要修改两个地方:

  • 挂载的磁盘增加到四个
  • 启动命令里面补上对应的挂载磁盘

该模式运行其中某个磁盘出现损坏的情况,在磁盘损坏后也能保证文件不会丢失。

分布式部署

在单机上部署纠删码模式只能保证磁盘损坏的情况下,文件不丢失;并不能解决单点故障的问题,所以我们下面为了避免单点故障导致服务不可用,把minio服务改成分布式部署。

我们就部署四个机器,每个机器挂载四个磁盘,这样的话,我们就形成了分布式纠删码模式了,这样的话,我们文件存储服务的可靠性就大大地增强了。

  • 首先准备四台主机,ip地址分别为192.168.2.231,192.168.2.232,192.168.2.233,192.168.2.234;
  • 其次,我们分别在四台机器上部署一个minio服务实例,参考以下docker-compose.yml:
version: "3.7"
services:
  minio:
    image: "quay.io/minio/minio:RELEASE.2022-08-02T23-59-16Z"
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - "./minio/data1:/data1"
      - "./minio/data2:/data2"
      - "./minio/data3:/data3"
      - "./minio/data4:/data4"
    command: server --console-address ":9001" http://192.168.2.231:9000/data{1...4} http://192.168.2.232:9000/data{1...4} http://192.168.2.233:9000/data{1...4} http://192.168.2.234:9000/data{1...4}
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=12345678
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

在启动命令中,我们需要把集群中所有的服务ip都写进去,这样的话,minio分布式服务才能正常通信。

  • 部署负载均衡服务nginx

当四台机器上的服务全部起来后,我们需要提供一个负载均衡服务作为访问minio分布式服务的统一的入口,首当其冲我们就想到了nginx,所以我们在使用docker compose部署一个nginx服务:

version: '3.7'
services:
  nginx:
    image: nginx:1.19.2-alpine
    hostname: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "9000:9000"
      - "9001:9001"

下面是nginx配置文件:

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
​
events {
    worker_connections  4096;
}
​
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
​
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
​
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
​
    # include /etc/nginx/conf.d/*.conf;
​
    upstream minio {
        server 192.168.2.231:9000;
        server 192.168.2.232:9000;
        server 192.168.2.233:9000;
        server 192.168.2.234:9000;
    }
​
    upstream console {
        ip_hash;
        server 192.168.2.231:9001;
        server 192.168.2.232:9001;
        server 192.168.2.233:9001;
        server 192.168.2.234:9001;
    }
    server {
        listen       9000;
        listen  [::]:9000;
        server_name  localhost;
​
        # To allow special characters in headers
        ignore_invalid_headers off;
        # Allow any size file to be uploaded.
        # Set to a value such as 1000m; to restrict file size to a specific value
        client_max_body_size 0;
        # To disable buffering
        proxy_buffering off;
        proxy_request_buffering off;
​
        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
​
            proxy_connect_timeout 300;
            # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            chunked_transfer_encoding off;
​
            proxy_pass http://minio;
        }
    }​
    server {
        listen       9001;
        listen  [::]:9001;
        server_name  localhost;
​
        # To allow special characters in headers
        ignore_invalid_headers off;
        # Allow any size file to be uploaded.
        # Set to a value such as 1000m; to restrict file size to a specific value
        client_max_body_size 0;
        # To disable buffering
        proxy_buffering off;
        proxy_request_buffering off;
​
        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-NginX-Proxy true;
​
            # This is necessary to pass the correct IP to be hashed
            real_ip_header X-Real-IP;
​
            proxy_connect_timeout 300;
            
            # To support websocket
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            
            chunked_transfer_encoding off;
​
            proxy_pass http://console;
        }
    }
}

启动nginx服务,这样所有的请求都通过nginx负载均衡到minio服务上。

这样完成了minio服务的三种docker compose部署方式,逐次递进地讲解了每种方式的优势。如果我们只是为了集成minio到我们的应用程序中,只需要搭建一个单机版的服务即可。更多相关Docker compose内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker-Compose搭建Spark集群的实现方法

    目录 一.前言 二.docker-compose.yml 三.启动集群 四.结合hdfs使用 一.前言 在前文中,我们使用Docker-Compose完成了hdfs集群的构建.本文将继续使用Docker-Compose,实现Spark集群的搭建. 二.docker-compose.yml 对于Spark集群,我们采用一个mater节点和两个worker节点进行构建.其中,所有的work节点均分配1一个core和 1GB的内存. Docker镜像选择了bitnami/spark的开源镜像,选择的s

  • docker compose安装etcd的详细过程

    1.下载docker-compose wget https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64 mv docker-compose-linux-x86_64 docker-compose chmod u+x docker-compose 2.创建etcd数据目录(根据自己需求修改) mkdir -p /app/apisix/etcd/data 3.创建yaml配置文件 [

  • docker-compose启动redis集群的实现步骤

    目录 1. 伪集群安装 持久化存储 启动集群 集群初始化 2. 测试 读写测试 key所在节点 多机集群见我的另一篇文档<docker-compose启动redis多机集群(6台服务器3主3从)>,此处是一个用于学习的伪集群. 1. 伪集群安装 docker-compose.yml 创建redis-cluster目录,目录下创建docker-compose.yml文件如下 version: '2.2' x-image:  &default-image  bitnami/redis-cl

  • docker搭建minio及java sdk使用过程详解

    目录 1minio简洁 2 docker搭建minio 2.1 单节点 2.2 多节点部署 3 java sdk使用minio 1minio简洁 MinIO 是一款高性能.分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件.即X86等低成本机器也能够很好的运行MinIO. MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计.因为MinIO一开始就只为对象存储而设计.所以他采用了更易用的方式进行设计,它能实现对象存储所需要的

  • docker版es、milvus、minio启动命令详解

    1.es启动命令: docker run -itd -e TAKE_FILE_OWNERSHIP=1111 -v /data/elasticsearch/data:/usr/share/elasticsearch/data -p 9200:9200 --name es elasticsearch:6.4.2 需要添加环境变量 TAKE_FILE_OWNERSHIP,值随意. 含义请参考我的另一篇文章://www.jb51.net/article/200198.htm 挂载目录用来存储es的数据.

  • Docker安装MinIO详细步骤介绍

    目录 一.查看docker环境是否正常 二.下载minIO的镜像 三.创建minIO容器 四.访问地址 五.安装遇到问题 1.问题一 2.问题二 3.问题三 一.查看docker环境是否正常 在命令行使用docker search minIO: 如果能查出来证明docker安装的没问题,然后开始下一步 二.下载minIO的镜像 docker pull minio/minio 三.创建minIO容器 查看所有镜像 docker images 创建目录:一个用来存放配置,一个用来存储上传文件的目录.

  • docker compose快速开始超详细教程

    目录 docker compose快速开始 一.什么是docker compose 1. Compose 特性 在单独的主机上提供多个相互隔离的环境 在创建容器时,自动保存 volume 数据 只重建有改动的容器 可以使用变量 2. 使用 Compose 步骤和思路 二.docker-compose常用命令 三.docker compose 安装 四.docker-compose.yml 基础 五.工作常用技巧 docker-compose或docker run 启动容器后就退出 docker-

  • docker-compose启动redis多机集群的实现(6台服务器3主3从)

    目录 1. 环境说明 2. 集群部署 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5 redis-node-6 3. 初始化 4. 测试 1. 环境说明 节点 IP redis-node-1 10.10.239.31 redis-node-2 10.10.239.32 redis-node-3 10.10.239.33 redis-node-4 10.10.239.34 redis-node-5 10.10.239

  • Docker compose部署minio服务

    目录 介绍 单机版部署 纠删码模式部署 分布式部署 介绍 最近才知道minio这个对象存储服务中间件,简直相见恨晚,只怪我见识太短浅(哭泣脸). 说得通俗易懂点,minio的作用就是用来存储文件的,比如图片.视频.音频等各种类型的文件. 那么问题来了,java本身就可以直接把文件写到磁盘里面,为什么还要用minio呢? minio有完善的文件管理功能,包括针对文件的上传,下载,删除等 minio有强大的纠删功能,即便磁盘损坏,在一定程度上时可以避免丢失文件的 minio有完善的权限管理功能,它可

  • Docker Compose部署微服务项目上线功能

    目录 一.需求说明 二.效果图 三.项目结构 四.核心源码 ️Java依赖与接口 ️Docker相关源码 五.部署项目 小结 一.需求说明 编写一个SpringBoot + Redis 的微服务项目,并提供 hello接口,每访问一次接口,计数器+1 二.效果图 三.项目结构 目录说明 docker-compose.yml :项目的启动文件,配置编排等 Dockerfile:项目上线所需要的依赖,以及启动方式 四.核心源码 ️Java依赖与接口 依赖文件 pom.xml <?xml versio

  • docker compose部署主从复制的实现

    目录 配置解析 服务搭建 目录结构 Compose File 实例配置 启动服务 测试 受限于 Redis 单点性能,加上我们对数据天生就有的备份的需求,因此 Redis 提供了主从复制的服务. 本文记录了通过 docker compose 搭建一主双从的 Redis 服务. 配置解析 ################################# REPLICATION ################################# # [Slave]连接 Master 的配置 # s

  • Docker compose部署SpringBoot项目连接MySQL及遇到的坑

    前面使用docker简单部署了下SpringBoot项目并介绍了什么是Dockerfile,如果是镜像比较多的情况下如何一键交付呢?Docker-compose!,理解了Docker-compose后面学习K8s就会好理解一些 一.安装docker-compose 环境Centos7 //下载docker-compose curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-

  • Docker Compose部署Nginx的方法步骤

    使用Docker Compose部署Nginx,创建docker-compose.yaml: [root@192 ~]# vim docker-compose.yaml 输入以下内容: version: '3' services: nginx: container_name: nginx image: nginx restart: always ports: - 8080:80 privileged: true networks: - mynginx networks: mynginx: dri

  • docker Compose部署springboot+vue前端端分离

    目录 (一) 准备工作 一.安装 二.修改生产环境下的配置以及打包操作: (二) 开始部署 一.blog_api 制作镜像 二.dockerCompose编排 三.mysql.redis.nginx的配置: 四.导入数据[数据库表的数据.前端静态web资源] 五.测试并排除错误: 温馨提示:如果有自己的服务器最好不过了,这样部署网项目就可以上线了.没有的话,只能使用localhost 本机访问啦,记得替换 ngixn 中的ip地址.域名为localhost. (一) 准备工作 一.安装 1.安装

  • Docker Compose搭建Wordpress服务实现详解

    目录 前言 编写docker-compose.yaml 注意点 前言 最近在研究wordpress独立建站,在项目部署的时候也踩了一些坑,为了避免再次踩坑,特此通过此文章记录一下. 编写docker-compose.yaml 此次建站采用的是docker compose的方式来部署wordpress项目,我们可以进入DockerHub官网找到wordpress镜像: 根据官方文档提供的信息,最终我们可以编写出如下docker-compose.yaml: version: "3.1" s

  • Docker中部署mysql服务的方法及遇到的坑

    最近一直在学习搬运工,感觉这么厉害的东西怎么以前不知道呢,把自己捣鼓的过程整理记录下来,供同学们参考 第零步:从Docker Hub拉取官方mysql镜像 docker pull mysql 然后就是进入漫长的等待,当然如果你配置了镜像加速器,速度会快那么一丢丢 第一步:使用docker images命令查看镜像 你会看到我们这里已经有了MySQL的的镜像 第二步:启动我们的mysql的镜像,创建一个MySQL的容器 使用命令:docker run -d --name mysql -p 3307

  • docker compose运行微服务项目的方法

    目录 1.数据库迁移 2.阅读docker-compose.yml文件 3.将项目打包 1.数据库迁移 将cloud-demo涉及的相关sql导入到Linux上的mysql容器中 2.阅读docker-compose.yml文件 version: "3.2" services: nacos: image: nacos/nacos-server:1.4.1 environment: MODE: standalone ports: - "8848:8848" mysql

  • Docker Compose部署及基础使用详解

    一 Docker Compose概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配置中创建并启动所有服务. Compose适用于所有环境:生产,登台,开发,测试以及CI工作流程. 使用Compose基本上是一个三步过程: 在Dockerfile中定义您的应用程序环境,以便可以在任何地方进行再生产. 定义构成应用程序的服务,docker-compose.yml 以便它们可以在隔离环

随机推荐