目錄
- 關(guān)于FastDFS
- 1、搜索鏡像
- 2、安裝鏡像
- 3.1、創(chuàng)建出所需要的目錄
- 3.2、創(chuàng)建tracker容器(跟蹤服務(wù)器容器)
- 3.3、創(chuàng)建storage容器(存儲服務(wù)器容器)
- 3.4、client測試
- 3.4、修改client.conf配置文件
- 4、文件上傳測試
- 5、配置Nginx
關(guān)于FastDFS
FastDFS 是以 C 語言開發(fā)的一項(xiàng)開源輕量級分布式文件系統(tǒng),他對文件進(jìn)行管理,主要功能有:文件存儲,文件同步,文件訪問(文件上傳/下載)等,特別適合以文件為載體的在線服務(wù),如:圖片網(wǎng)站,視頻網(wǎng)站等。
外話:FastDFS 是阿里余慶大神做的一個(gè)個(gè)人項(xiàng)目,從2008年研發(fā)FastDFS開源至今,在一些互聯(lián)網(wǎng)創(chuàng)業(yè)公司中備受推崇,GitHub開源地址:https://github.com/happyfish100/fastdfs
本文基于Docker搭建,以下是正文內(nèi)容:
1、搜索鏡像
執(zhí)行命令:
然后界面會(huì)搜出一大堆鏡像,選哪個(gè)呢?
![](/d/20211016/d90a583361b93f7ea9988fffd51ead4d.gif)
老規(guī)矩,我們選擇start數(shù)最多的準(zhǔn)沒錯(cuò),什么?start數(shù)不放心,怕被掛馬?ok,我們再去鏡像倉庫看一下:
![](/d/20211016/3e04cb1511ec7fa6d1978d0c88ef8f39.gif)
補(bǔ)充: 其實(shí)看這些鏡像的描述也能看出一些區(qū)別來的,比如 ygqygq2/fastdfs-nginx,該鏡像是整合了 Nginx 的 fastdfs,那么新的問題來了,為什么要整合 Nginx?因?yàn)閷τ?fastdfs 來說,安裝后只能在本機(jī)訪問… 我上傳文件肯定是為了能夠訪問的呀,所以為了提供 web 訪問,那么就需要集成 Nginx 了,但是比如就是想自己單獨(dú)搞 Nginx… 那么肯定就不會(huì)選了嘛,season/fastdfs 鏡像相對純凈些,本文就是基于 season/fastdfs 鏡像的,后面也附帶配置 Nginx…
2、安裝鏡像
執(zhí)行命令:
docker pull season/fastdfs:1.2
之所以選擇 1.2 版本,防止再次更新后本文不適合 latest 版本,執(zhí)行截圖如下:
3、
創(chuàng)建容器并掛載目錄
在創(chuàng)建容器之前我們先簡單說一下 FastDFS,F(xiàn)astDFS 系統(tǒng)有三個(gè)角色:
跟蹤服務(wù)器
(Tracker Server):跟蹤服務(wù)器,主要做調(diào)度工作,起到均衡的作用;負(fù)責(zé)管理所有的 storage server和 group,每個(gè) storage 在啟動(dòng)后會(huì)連接 Tracker,告知自己所屬 group 等信息,并保持周期性心跳。
存儲服務(wù)器
(Storage Server):存儲服務(wù)器,主要提供容量和備份服務(wù);以 group 為單位,每個(gè) group 內(nèi)可以有多臺 storage server,數(shù)據(jù)互為備份。
客戶端
(Client):上傳下載數(shù)據(jù)的服務(wù)器,也就是我們自己的項(xiàng)目所部署在的服務(wù)器。
說到這就是想告訴小伙伴,接下來我們可能創(chuàng)建 跟蹤服務(wù)器容器、存儲服務(wù)器容器、客戶端容器 這三個(gè)容器…
3.1、創(chuàng)建出所需要的目錄
我們先把需要的一些目錄創(chuàng)建出來(數(shù)據(jù)目錄、數(shù)據(jù)存儲目錄等),執(zhí)行命令:
mkdir -p /usr/local/server/fastdfs/tracker/data
mkdir -p /usr/local/server/fastdfs/storage/data
mkdir -p /usr/local/server/fastdfs/storage/path
3.2、創(chuàng)建tracker容器(跟蹤服務(wù)器容器)
執(zhí)行命令:
docker run -id --name tracker \
-p 22122:22122 \
--restart=always --net host \
-v /usr/local/server/fastdfs/tracker/data:/fastdfs/tracker/data \
season/fastdfs:1.2 tracker
再嘮叨一下上方命令:
- -d:讓容器在后臺運(yùn)行
- -p:指定容器內(nèi)部使用的網(wǎng)絡(luò)端口映射到我們使用的主機(jī)上
- --name:指定容器創(chuàng)建的名稱
- -v:容器跟宿主機(jī)之間的掛載目錄
3.3、創(chuàng)建storage容器(存儲服務(wù)器容器)
執(zhí)行命令(非最終執(zhí)行命令,請修改為自己的ip地址):
docker run -id --name storage \
--restart=always --net host \
-v /usr/local/server/fastdfs/data/storage:/fastdfs/store_path \
-e TRACKER_SERVER="10.211.55.4:22122" \
season/fastdfs:1.2 storage
3.4、client測試
兩個(gè)容器創(chuàng)建完之后,但此時(shí)兩個(gè)容器其實(shí)并沒有關(guān)聯(lián)起來,我們進(jìn)入tracker容器,通過client.conf測試一下:
docker exec -it tracker bash
cd /etc/fdfs/
ls
cat client.conf
輸出的 client.conf
都是默認(rèn)配置,我們可以找到其中的 track_server
地址:
![](/d/20211016/c5977b07dac83bf51de3d1ff357d00fe.gif)
嘗試執(zhí)行一下連接:
然后會(huì)得到如下內(nèi)容:
ERROR - file: ../common/connection_pool.c, line: 84, connect to 192.168.209.121:22122 fail, errno: 110, error info: Connection timed out
也就是在沒有修改client配置之前,默認(rèn) tracker 是去連接 192.168.209.121
地址的,那么接下來就是需要去配置client配置文件了。
![](/d/20211016/8230d3c8d5d4612b65257a0b337c31c9.gif)
3.4、修改client.conf配置文件
通過 docker exec -it tracker bash
進(jìn)入 tracker 容器后不能使用 vi vim 命令,所以干脆將 client.conf 配置文件復(fù)制出來,在宿主機(jī)修改完再粘貼回去。
執(zhí)行命令:
docker cp trakcer:/etc/fdfs/client.conf /usr/local/server/fastdfs/
我們通過 docker 指令將配置文件復(fù)制到 /usr/local/server/fastdfs/
目錄。
![](/d/20211016/ba76876131fa5c8284020fe235904ff7.gif)
我們編輯這個(gè)文件,修改 tracker_url 地址(vi client.conf
):
![](/d/20211016/feb3b5d6de35da04ebd0b2896db3340c.gif)
修改后保存,然后將修改后的文件替換回去。指令命令:
docker cp /usr/local/server/fastdfs/client.conf tracker:/etc/fdfs
至此,配置文件修改完了,接下來我們創(chuàng)建文件上傳測試一下。
4、文件上傳測試
執(zhí)行命令,進(jìn)入 tracker 容器中:
docker exec -it tracker bash
隨便創(chuàng)建一個(gè) txt 文件:
echo "niceyoo" > niceyoo.txt
然后通過 fdfs_upload_file 命令將 niceyoo.txt 文件上傳至服務(wù)器:
fdfs_upload_file /etc/fdfs/client.conf niceyoo.txt
如果此時(shí)報(bào)了如下錯(cuò)誤:
![](/d/20211016/ea87513e79557a6d997f7e8e8e850edd.gif)
那么就創(chuàng)建一下這個(gè)路徑,沒有的跳過:
mkdir -p /home/yuqing/fastdfs
創(chuàng)建目錄后重新嘗試提交:
![](/d/20211016/c91c0b7d3dee308faffa3ecccfa00602.gif)
我們復(fù)制出這個(gè)文件名來:group1/M00/00/00/CtM3BF84iz2AWE_JAAAACBfWGpM793.txt
,這個(gè)名稱后面有用,將用作后面配置nginx時(shí)配置訪問文件路徑。
因?yàn)槲覀冎皰燧d了宿主機(jī)的目錄,我們?nèi)?cd /usr/local/server/fastdfs
看一下:
cd /usr/local/server/fastdfs/data/storage/data
ls
輸出內(nèi)容如下:
![](/d/20211016/d1c817f2a069c2ed76fda81503c77c92.gif)
5、配置Nginx
前面的補(bǔ)充已經(jīng)提到了,默認(rèn)上傳的文件是只能在本機(jī)訪問的,當(dāng)然這樣肯定是不行的,所以我們需要配置一下Nginx 來幫我們實(shí)現(xiàn) Web 訪問的效果。
創(chuàng)建nginx目錄:
mkdir -p /usr/local/server/fastdfs/nginx/
將storage容器中的nginx配置文件復(fù)制出來:
docker cp storage:/etc/nginx/conf/nginx.conf /usr/local/server/fastdfs/nginx/
修改nginx中的配置:
vi /usr/local/server/fastdfs/nginx/nginx.conf
找到local節(jié)點(diǎn),修改為:
location / {
root /fastdfs/store_path/data;
ngx_fastdfs_module;
}
相關(guān)截圖如下:
![](/d/20211016/14496fa62ffc03c6eab09e5767c764d7.gif)
接下來就是創(chuàng)建nginx容器,并指向剛剛的配置文件了。
沒有安裝過nginx的小伙伴同樣可以執(zhí)行如下指令,默認(rèn)會(huì)幫你拉取鏡像然后安裝的。
注意:請修改ip地址后再執(zhí)行
docker run -id --name fastdfs_nginx \
--restart=always \
-v /usr/local/server/fastdfs/data/storage:/fastdfs/store_path \
-v /usr/local/server/fastdfs/nginx/nginx.conf:/etc/nginx/conf/nginx.conf \
-p 8888:80 \
-e TRACKER_SERVER=10.211.55.4:22122 \
season/fastdfs:1.2 nginx
至此,我們查看一下目前創(chuàng)建以及啟動(dòng)的容器:
![](/d/20211016/e09772f2a981a3f8720fae7f08a90dea.gif)
我們測試一下之前上傳的文件 group1/M00/00/00/CtM3BF84iz2AWE_JAAAACBfWGpM793.txt
,執(zhí)行如下命令:
curl -i http://127.0.0.1:8888/group1/M00/00/00/CtM3BF84iz2AWE_JAAAACBfWGpM793.txt
執(zhí)行結(jié)果:
![](/d/20211016/eb817132bae7db2cb84b06c5f8b52893.gif)
至此,整個(gè)過程就搭建成功了,我們通過瀏覽器訪問一下:
![](/d/20211016/ab4efd4c788ed1249d8118d10e33c351.gif)
搭建完成怎么在項(xiàng)目當(dāng)中使用呢?
SpringBoot集成FastDFS依賴實(shí)現(xiàn)文件上傳
到此這篇關(guān)于Docker中搭建FastDFS文件系統(tǒng)(多圖教程)的文章就介紹到這了,更多相關(guān)Docker搭建FastDFS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!