注意:在安装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;
容器名 | 容器端口 | 宿主机映射端口 | 容器映射目录 | 宿主机映射目录 |
---|---|---|---|---|
minio1 | 9000 | 9001 | /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 |
minio2 | 9000 | 9002 | /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地址 |
---|---|
minio1 | 172.18.0.101 |
minio2 | 172.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 截图
创建了一个桶