一、 分布式部署minio 注:拒絕花里胡哨 已封裝的minio--image:registry.cn-hangzhou.aliyuncs.com/yyzhan_images/docker-minio:2020-12-14
編寫docker-compose 我起了四個minio對應四個docker容器 訪問:宿主機:端口
version: '3.7'
services:
minio1:
image: minio/minio:RELEASE.2020-11-13T20-10-18Z
volumes:
- /storage/minio/data1-1:/data1 # /storage/minio/data1-1 要掛載的宿主機文件絕對路徑
- /storage/minio/data1-2:/data2
ports:
- "9000:9000" #冒號前是宿主機開放端口 后是docker容器內端口 此配置目的是將docker容器端口映射到宿主機上 這樣就能訪問了。
environment:
MINIO_ACCESS_KEY: ***** #minio賬號設置
MINIO_SECRET_KEY: *********** #minio賬號密碼設置
command: server http://minio{1...4}/data{1...2} #定義訪問url
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio2:
image: minio/minio:RELEASE.2020-11-13T20-10-18Z
volumes:
- /storage/minio/data2-1:/data1
- /storage/minio/data2-2:/data2
ports:
- "9001:9000"
environment:
MINIO_ACCESS_KEY: *****
MINIO_SECRET_KEY: ***********
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio3:
image: minio/minio:RELEASE.2020-11-13T20-10-18Z
ports:
- /storage/minio/data3-1:/data1
- /storage/minio/data3-2:/data2
ports:
- "9002:9000"
environment:
MINIO_ACCESS_KEY: *****
MINIO_SECRET_KEY: ***********
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio4:
image: minio/minio:RELEASE.2020-11-13T20-10-18Z
volumes:
- /storage/minio/data4-1:/data1
- /storage/minio/data4-2:/data2
ports:
- "9003:9000"
environment:
MINIO_ACCESS_KEY: *****
MINIO_SECRET_KEY: ***********
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
volumes:
data1-1:
data1-2:
data2-1:
data2-2:
data3-1:
data3-2:
data4-1:
data4-2:
PS:使用docker-compose構建命令如下
docker-compose up -d 如果報錯沒有此命令
yum -y install docker-compose
完成后如下效果--自個可以上傳點圖片啥的

如此分布式minio就部署好了,如需要擴展請參照官方文檔
二、
nginx部署我的方式是編寫dockerfile自個構建自個需要的nginx環境 內容如下
ps:已封裝鏡像路徑:registry.cn-hangzhou.aliyuncs.com/yyzhan_images/minio_nginx:2020-12-14
#第一行先定義基礎鏡像,表示當前鏡像文件是基於哪個進行編輯的.
FROM centos:centos7.9.2009
#指定鏡像維護者的信息.
MAINTAINER @自在拉基 helpdesk81@outlook.com
#除了安裝編譯nginx的依賴的安裝包外,還可以將一些常用的命令工具也安裝上
#類似於這樣的安裝命令(或者經常改動相對較小的命令)應該盡量往前寫,這樣在多次編譯時就不會重復執行了(因為默認會使用緩嫿,從而提升編譯效猿
#順帶將centos的yum源改成阿里雲癭
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && yum makecache && yum update -y
RUN yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel gd gd-devel vim wget unzip zip libxslt-dev libexif-devel
#下載軟件包並解壓
RUN wget https://github.com/linsongze/ngx_http_image_filter_module/archive/master.zip #最新的剪切插件
RUN unzip master.zip #最新的剪切插件
RUN wget http://nginx.org/download/nginx-1.16.1.tar.gz
RUN tar zxf nginx-1.16.1.tar.gz
# 創建nginx 用戶yum方式安裝無需做此步驟,因為默認yum安裝會自動創建nginx用戶,咱們下面指令以nginx用戶運行,因此我們需要在鏡像中創廣nginx用戶"
RUN useradd -M -s /sbin/nologin nginx
#切換工作目錄
WORKDIR nginx-1.16.1
#編譯安裝nginx
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --add-module=/ngx_http_image_filter_module-master --with-http_ssl_module #將最新的插件編譯安裝進去編譯的路徑很關鍵等下docker run啟動容器的時候需要用到要特別注意
RUN make && make install
#將access.log日志重定向到docker的標准輸兿將error.log日志重定向到docker標准錯誤,這樣docker logs 的時候就可以看到日志了⾿
RUN ln -sf /dev/stdout /usr/local/nginx/logs/access.log && ln -sf /dev/stderr /usr/local/nginx/logs/error.log
#相比COPY指令,ADD指令可以解壓"*.tar.gz"的文乿但如果你的安裝包斿*.zip"文件的話,ADD指令也不好使,得咱們自己使用unzip相關命令自行解壓,索性我上面已經安裝了unzip相關的軟件包
# ADD code.tar.gz /yinzhengjie/softwares/nginx/html
#定義向外暴露的端口號,多個端口用空格做間隔,啟動容器的時便-p"需要使用此端向外端映射.
EXPOSE 80/tcp 443/tcp
#定義前台運行的命乿每個Docker只能有一條,如果定義了多替CMD"指令那么最后一條CMD指令會覆蓋之前的(即只有最后一條CMD被執蟿.
# CMD ["nginx"]
# WORKDIR /root/nginx
# ADD nginx.sh /nginx.sh
# RUN chmod 755 /nginx.sh
#啟動容器執行指令,Dockerfile中添加了一個自定義CMD,需要➕ ᾿g᾿“daemon off᾿
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
PS: 在dockerfile目錄下執行docker image build -t nginx_filter_module:1 . 來打包構建鏡像
nginx_filter_module這個是鏡像名稱:1 1是標簽
三、重點!!!:nginx.conf配置文件(正則耗了我好長時間)這里去掉了花里胡哨留了自個需要的東西
worker_processes 4;
events {
worker_connections 1024;
}
http {
include mime.types;
#default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
proxy_cache_path /usr/local/nginx/conf/cache levels=1:2 keys_zone=minio_cache:100m max_size=10g inactive=5d; #設置緩存 -緩存路徑usr/local/nginx/conf/cache
#gzip on;
upstream minio {
server 宿主機IP:9000 weight=10;
server 宿主機IP:9001 weight=10;
server 宿主機IP:9002 weight=10;
server 宿主機IP:9003 weight=10;
}
server {
listen 9009;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~^/files/(.*)\.(?i)(jpg|jpeg|jpg|gif|png)/(\d+)x(\d+) {
set $w $3;
set $h $4;
if ($w != "0") {
rewrite ^/files/(.*)\.(?i)(jpg|jpeg|jpg|gif|png)/(\d+)x(\d+)$ /$1.$2 break;
}
image_filter resize $w $h;
image_filter_buffer 100M;
proxy_set_header Authorization '';
proxy_cache minio_cache;
proxy_cache_valid 200 206 304 301 302 5d;
proxy_pass http://minio;
}
location ~^/files/(.*)\.(?i)(jpg|jpeg|jpg|gif|png)!(\d+)x(\d+) {
set $w $3;
set $h $4;
if ($w != "0") {
rewrite ^/files/(.*)\.(?i)(jpg|jpeg|jpg|gif|png)!(\d+)x(\d+)$ /$1.$2 break;
}
image_filter resize $w $h;
image_filter_buffer 100M;
proxy_set_header Authorization ''; #后端自定義請求頭時需要用到!!
proxy_cache minio_cache; #走這個location時緩存數據
proxy_cache_valid 200 206 304 301 302 5d;
proxy_pass http://minio;
}
location ~^/files/ {
proxy_set_header Authorization '';
proxy_set_header Host $http_host;
rewrite ^/files/(.*)$ /$1 break;
proxy_pass http://minio;
}
#直接訪問/files/eop返回404
location = /files/eop {
return 404;
}
#直接訪問/files/eop/返回404
location = /files/eop/ {
return 404;
}
}
}
直接來docker run 本地映射文件想清楚了再docker run
docker run -itd -p 9009:9009 --name Master_minio_nginx -v /storage/minio/location_nginxMinioWeb/image_filter_nginx/:/usr/local/nginx/conf -v /etc/localtime:/etc/localtime:ro nginx_filter_module:1
PS:-v /storage/minio/location_nginxMinioWeb/image_filter_nginx/:/usr/local/nginx/conf
注意!!!
/storage/minio/location_nginxMinioWeb/image_filter_nginx/此路徑與docker容器的/usr/local/nginx/conf是映射關系所以直接將我們編輯完畢的nginx.conf文件存放到宿主機上的 /storage/minio/location_nginxMinioWeb/image_filter_nginx/這個路徑docker 容器啟動的時候才能讀到我們的配置。
補充:部署完畢后啟動docker時會報錯
將這個文件也弄進配置文件目錄下 在nginx.conf文件同級下新建文件mime.types編輯內容如下:
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
wq保存restart即可!!!
