title: Docker部署MinIO
date: 2024-08-02
tags: docker

Docker部署MinIO

一、单节点部署

1、获取minio镜像
1
docker pull minio/minio:RELEASE.2021-04-22T15-44-28Z
2、启动
1
2
3
4
5
6
docker run -p 9000:9000 --name minio1 \
-d --restart=always \
-v /data/middleware/minio/data1:/data \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=Abc@123.." \
minio/minio:RELEASE.2021-04-22T15-44-28Z server /data

二、集群部署(单服务器)

1、创建minio网络
1
docker network create --subnet=172.19.0.0/16 minio-net
2、启动四个节点
1
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
# minio1
docker run -id \
--name=minio1 \
--restart=always \
-p 9100:9000 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /data/minios/minio1/data1:/data1 \
-v /data/minios/minio1/data2:/data2 \
--network minio-net --ip 172.19.0.2 \
minio/minio:RELEASE.2021-04-22T15-44-28Z server \
-address ":9000" \
http://172.19.0.{2...5}/data{1...2}
# minio2
docker run -id \
--name=minio2 \
--restart=always \
-p 9200:9000 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /data/minios/minio2/data1:/data1 \
-v /data/minios/minio2/data2:/data2 \
--network minio-net --ip 172.19.0.3 \
minio/minio:RELEASE.2021-04-22T15-44-28Z server \
-address ":9000" \
http://172.19.0.{2...5}/data{1...2}
# minio3
docker run -id \
--name=minio3 \
--restart=always \
-p 9300:9000 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /data/minios/minio3/data1:/data1 \
-v /data/minios/minio3/data2:/data2 \
--network minio-net --ip 172.19.0.4 \
minio/minio:RELEASE.2021-04-22T15-44-28Z server \
-address ":9000" \
http://172.19.0.{2...5}/data{1...2}
# minio4
docker run -id \
--name=minio4 \
--restart=always \
-p 9400:9000 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /data/minios/minio4/data1:/data1 \
-v /data/minios/minio4/data2:/data2 \
--network minio-net --ip 172.19.0.5 \
minio/minio:RELEASE.2021-04-22T15-44-28Z server \
-address ":9000" \
http://172.19.0.{2...5}/data{1...2}

3、nginx配置

因为MinIO后台使用了WebSocket技术,需要在nginx上配置Upgrade、Connection等请求头来支持WebSocket的转发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
upstream minioserver{
server 172.19.0.2:9000;
server 172.19.0.3:9000;
server 172.19.0.4:9000;
server 172.19.0.5:9000;
}

server {
listen 9000;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://minioserver;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

启动nginx容器

1
2
3
4
5
6
7
8
docker run -d \
--name nginx \
-p 80:80 \
-p 9000:9000 \
-v /data/middleware/nginx/conf.d/:/etc/nginx/conf.d/ \
-v /etc/localtime:/etc/localtime \
--network minio-net --ip 172.19.0.6 \
nginx

注意!

1
2
在进行集群部署的时候一直出现各种报错,集群部署好了,nginx开始出错,最后发现是容器之间网络的问题,之后尝试创建一个minio-net网络,并给所有容器配置同一个网络,因为minio集群部署以及nginx转发需要指定IP,因此在配置的时候指定了IP,这些问题主要是在同一台服务器上部署minio集群的时候会出现。
在使用dockercompose部署的时候也需要注意容器之间的网络问题