Docker安装MinIO

注意:在安装MinIO时,一定要保证映射的目录(例如:/data)必须为空,即里面没有数据。

1 Docker安装单个MinIO

1.1 MinIO旧版本安装(推荐)

备注:在遇到问题时,使用比较新的稳定的旧版本,能够相对容易的找到解决方案。

# 下载MinIO
sudo docker pull minio/minio:RELEASE.2021-04-18T19-26-29Z

# 启动MinIO
# 账号:MINIO_ACCESS_KEY=minioroot,密码:MINIO_SECRET_KEY=minioroot
# 网页的端口和接口的端口都是9000
sudo docker run -d -p 9000:9000 \
--name minio \
--restart=always \
-e "MINIO_ACCESS_KEY=minioroot" \
-e "MINIO_SECRET_KEY=minioroot" \
-v /home/yyp/minio/data:/data \
-v /home/yyp/minio/config:/root/.minio \
minio/minio:RELEASE.2021-04-18T19-26-29Z server /data

1.2 MinIO新版本安装

参考网站:MinIO | Learn more about MinIO's Docker Implementation

“RELEASE.2021-04”以后发布的最好使用以下方式。

# 下载MinIO
sudo docker pull minio/minio:RELEASE.2022-02-12T00-51-25Z

# 启动MinIO
# 账号:MINIO_ROOT_USER=minioroot,密码:MINIO_ROOT_PASSWORD=minioroot
# 9001是网页的端口,9000是接口的端口
sudo docker run \
  -d \
  --name minio \
  --restart=always \
  -p 9000:9000 \
  -p 9001:9001 \
  -e "MINIO_ROOT_USER=minioroot" \
  -e "MINIO_ROOT_PASSWORD=minioroot" \
  -v /home/yyp/minio/data:/data \
  -v /home/yyp/minio/config:/root/.minio \
  minio/minio:RELEASE.2022-02-12T00-51-25Z server /data --console-address ":9001"

# 查看安装日志
sudo docker logs minio

# 出现以下信息说明安装成功
API: http://172.17.0.2:9000  http://127.0.0.1:9000 
Console: http://172.17.0.2:9001 http://127.0.0.1:9001 
Documentation: https://docs.min.io

2 Docker安装集群MinIO(单台机器)

2.1 基本环境配置

容器数据(即minio的数据地址)映射在了"/minio/"目录下的data1、data2、data3、data4;

宿主机数据映射在了"/home/yyp/db/"目录下的minio1、minio2;minio1和minio2下都存在data1、data2、data3、data4;

容器名容器端口宿主机映射端口容器映射目录宿主机映射目录
minio190009001/minio/data1,/minio/data2,/minio/data3,/minio/data4/home/yyp/db/minio1/data1,/home/yyp/db/minio1/data2,/home/yyp/db/minio1/data3,/home/yyp/db/minio1/data4
minio290009002/minio/data1,/minio/data2,/minio/data3,/minio/data4/home/yyp/db/minio2/data1,/home/yyp/db/minio2/data2,/home/yyp/db/minio2/data3,/home/yyp/db/minio2/data4

2.2 使用命令安装

(1)创建网桥

# 设置固定ip地址,需要先自定义网桥,在bridge上无法设置静态ip
sudo docker network create --driver bridge  --subnet=172.18.0.0/24 --gateway=172.18.0.1 miniobridge

# 如果是单机安装,在每台机器上执行以下命令即可(使用docker安装不需要)
# minio server http://172.18.0.101/minio/data{1...4} http://172.18.0.102/minio/data{1...4}

(2)使用IP地址创建集群(不推荐)

ip地址配置

容器名ip地址
minio1172.18.0.101
minio2172.18.0.102

创建容器minio1

sudo docker run \
-d \
-p 9001:9000 \
--network miniobridge \
--ip 172.18.0.101 \
--name minio1 \
--restart=always \
-e "MINIO_ACCESS_KEY=minioroot" \
-e "MINIO_SECRET_KEY=minioroot" \
-v /home/yyp/db/minio1/data1:/minio/data1 \
-v /home/yyp/db/minio1/data2:/minio/data2 \
-v /home/yyp/db/minio1/data3:/minio/data3 \
-v /home/yyp/db/minio1/data4:/minio/data4 \
-v /home/yyp/db/minio1/config:/root/.minio \
minio/minio:RELEASE.2021-04-18T19-26-29Z server http://172.18.0.101/minio/data{1...4} http://172.18.0.102/minio/data{1...4}

创建容器minio2

sudo docker run \
-d \
-p 9002:9000 \
--network miniobridge \
--ip 172.18.0.102 \
--name minio2 \
--restart=always \
-e "MINIO_ACCESS_KEY=minioroot" \
-e "MINIO_SECRET_KEY=minioroot" \
-v /home/yyp/db/minio2/data1:/minio/data1 \
-v /home/yyp/db/minio2/data2:/minio/data2 \
-v /home/yyp/db/minio2/data3:/minio/data3 \
-v /home/yyp/db/minio2/data4:/minio/data4 \
-v /home/yyp/db/minio2/config:/root/.minio \
minio/minio:RELEASE.2021-04-18T19-26-29Z server http://172.18.0.101/minio/data{1...4} http://172.18.0.102/minio/data{1...4}

(3)使用容器名创建集群(推荐)

使用此方法不需要考虑ip地址的问题,docker有自己的容器DNS,注意:容器必须设置网桥。

创建容器minio1

sudo docker run \
-d \
-p 9001:9000 \
--network miniobridge \
--name minio1 \
--restart=always \
-e "MINIO_ACCESS_KEY=minioroot" \
-e "MINIO_SECRET_KEY=minioroot" \
-v /home/yyp/db/minio1/data1:/minio/data1 \
-v /home/yyp/db/minio1/data2:/minio/data2 \
-v /home/yyp/db/minio1/data3:/minio/data3 \
-v /home/yyp/db/minio1/data4:/minio/data4 \
-v /home/yyp/db/minio1/config:/root/.minio \
minio/minio:RELEASE.2021-04-18T19-26-29Z server http://minio1/minio/data{1...4} http://minio2/minio/data{1...4}

创建容器minio2

sudo docker run \
-d \
-p 9002:9000 \
--network miniobridge \
--name minio2 \
--restart=always \
-e "MINIO_ACCESS_KEY=minioroot" \
-e "MINIO_SECRET_KEY=minioroot" \
-v /home/yyp/db/minio2/data1:/minio/data1 \
-v /home/yyp/db/minio2/data2:/minio/data2 \
-v /home/yyp/db/minio2/data3:/minio/data3 \
-v /home/yyp/db/minio2/data4:/minio/data4 \
-v /home/yyp/db/minio2/config:/root/.minio \
minio/minio:RELEASE.2021-04-18T19-26-29Z server http://minio1/minio/data{1...4} http://minio2/minio/data{1...4}

3 使用docker-compose编排

相关的配置参考文件地址如下:

docker-compose安装minio官方: MinIO | Deploy MinIO on Docker Compose

docker-compose.yaml文件地址:https://github.com/minio/minio/blob/master/docs/orchestration/docker-compose/docker-compose.yaml?raw=true

nginx.conf文件地址:https://github.com/minio/minio/blob/master/docs/orchestration/docker-compose/nginx.conf?raw=true

注意:官方版本比较新

3.1 自定义映射路径(推荐)

(1)docker-compose.yaml文件

# docker-compose.yaml
version: '3.7'

# 启动minio1、minio2两个容器
# 映射的端口号是9001:9000、9002:9000

services:
  minio1:
    image: minio/minio:RELEASE.2021-04-18T19-26-29Z
    container_name: minio1
    volumes:
      - /home/yyp/db/minio1/data1:/data1
      - /home/yyp/db/minio1/data2:/data2
      - /home/yyp/db/minio1/data3:/data3
      - /home/yyp/db/minio1/data4:/data4
    ports:
      - "9001:9000"
    # 设置开机自启动
    restart: always
    environment:
      MINIO_ACCESS_KEY: minioroot
      MINIO_SECRET_KEY: minioroot
    command: server http://minio{1...2}/data{1...4}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio2:
    image: minio/minio:RELEASE.2021-04-18T19-26-29Z
    container_name: minio2
    volumes:
      - /home/yyp/db/minio2/data1:/data1
      - /home/yyp/db/minio2/data2:/data2
      - /home/yyp/db/minio2/data3:/data3
      - /home/yyp/db/minio2/data4:/data4
    ports:
      - "9002:9000"
    # 设置开机自启动
    restart: always
    environment:
      MINIO_ACCESS_KEY: minioroot
      MINIO_SECRET_KEY: minioroot
    command: server http://minio{1...2}/data{1...4}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
  
  minio_nginx:
    image: nginx:1.20.0
    container_name: minio_nginx
    ports:
      - "80:80"
      - "443:443"
      - "9000:9000"
    # 设置开机自启动
    restart: always
    depends_on:
      - minio1
      - minio2

# 使用自定义网桥
# 可以不配置此项,如果不配置网桥,docker-compose会自动生成一个网桥
networks:
  default:
    external: 
      name: miniobridge
(2)启动容器
# 如果当前目录下存在docker-compose.yaml文件
sudo docker-compose up -d

# 如果当前目录的yaml文件重名为了my-docker-compose.yaml
sudo docker-compose -f my-docker-compose.yaml up -d

3.2 使用卷标(不推荐)

使用卷标后,docker自动映射数据目录,维护不方便管理。


# docker-compose.yaml
version: '3.7'

# 启动minio1、minio2两个容器
# 映射的端口号是9001:9000、9002:9000

services:
  minio1:
    image: minio/minio:RELEASE.2021-04-18T19-26-29Z
    container_name: minio1
    volumes:
      - data1-1:/data1
      - data1-2:/data2
      - data1-3:/data3
      - data1-4:/data4
    ports:
      - "9001:9000"
    environment:
      MINIO_ACCESS_KEY: minioroot
      MINIO_SECRET_KEY: minioroot
    command: server http://minio{1...2}/data{1...4}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio2:
    image: minio/minio:RELEASE.2021-04-18T19-26-29Z
    container_name: minio2
    volumes:
      - data2-1:/data1
      - data2-2:/data2
      - data2-3:/data3
      - data2-4:/data4
    ports:
      - "9002:9000"
    environment:
      MINIO_ACCESS_KEY: minioroot
      MINIO_SECRET_KEY: minioroot
    command: server http://minio{1...2}/data{1...4}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
  
  minio_nginx:
    image: nginx:1.20.0
    container_name: minio_nginx
    ports:
      - "80:80"
      - "443:443"
      - "9000:9000"
    depends_on:
      - minio1
      - minio2

# 配置卷标
# 对应容器下volumes冒号前面的配置项,docker会自动在宿主机目录下映射目录
# 查看映射目录(卷标)的方法
# 查看卷标列表:docker volume ls
# 查看卷标信息:docker volume inspect 卷标名
volumes:
  data1-1:
  data1-2:
  data1-3:
  data1-4:
  data2-1:
  data2-2:
  data2-3:
  data2-4:
  
# 使用自定义网桥
# 可以不配置此项,如果不配置网桥,docker-compose会自动生成一个网桥
networks:
  default:
    external: 
      name: miniobridge

3.3 nginx代理

(1)复制配置文件

# 将default.conf文件从容器中复制到宿主机
sudo docker cp minio_nginx:/etc/nginx/conf.d/default.conf . 

# 将修改好的default.conf(参考下面的配置)文件复制到容器中
sudo docker cp default.conf minio_nginx:/etc/nginx/conf.d

# 重启容器
sudo docker restart minio_nginx

(2)default.conf文件内容

# Nginx默认配置
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

# 配置负载均衡
upstream minio {
    server minio1:9000;
    server minio2:9000;
}

# 新添加配置
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;
    }
}

4 截图

创建了一个桶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值