如何使用Docker容器安裝FastDFS
技術標籤:大後端大運維dockerfastdfscentoslinuxnginx
文章目錄
1、前言
之前有一篇文章,是在centos上從零搭建一個FastDFS分散式檔案系統, 包括叢集部署和java客戶端連線。
這裡就不再贅述相關理論知識;感興趣,可進傳送門-如何從零搭建一個FastDFS分散式檔案系統;
通過以上文章可知,如果跨機器需要再部署一個FastDFS,似乎看起來有些許的麻煩,所以考慮使用Docker容器來部署一個FastDFS。
2、Docker部署
搜尋已有的fastdfs映象
[[email protected] fastdfs]# docker search fastdfs
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
season/fastdfs FastDFS 71
luhuiguo/fastdfs FastDFS is an open source high performance d… 25 [OK]
ygqygq2/fastdfs-nginx 整合了nginx的fastdfs 24 [OK]
morunchang/fastdfs A FastDFS image 19
delron/fastdfs 12
.. ....
列表按starts
排列,我們這裡選擇delron/fastdfs
,裡面預設安裝了nginx
。
排名第一的season/fastdfs
,最新版本預設沒有安裝nginx。
2.1、 安裝tracker容器
/docker/fastdfs/tracker/start.sh
執行
tracker
跟蹤服務,預設埠為22122
,對映/docker/volumes/fastdfs/tracker
以保留資料和日誌
[[email protected] /]# mkdir -p /docker/fastdfs/tracker
[[email protected] /tracker]# cd /docker/fastdfs/tracker
# 建立宿主機器掛載點,保證容器資料可以持續化儲存
[[email protected] /]# mkdir -p /docker/volumes/fastdfs/tracker
# 啟動指令碼
[[email protected] /tracker]# vim start.sh
docker stop tracker-test
docker rm tracker-test
# 執行tracker跟蹤服務,預設埠為22122,對映`/docker/volumes/fastdfs/tracker`以保留資料和日誌
docker run -itd --name tracker-test -p 22122:22122 \
-v /docker/volumes/fastdfs/tracker:/var/fdfs \
delron/fastdfs tracker
------------------------------------------------
# 啟動tracker容器
[[email protected] /tracker]# sh start.sh
# 檢視容器執行
[[email protected] tracker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
407659b39e5e delron/fastdfs "/usr/bin/start1.sh …" 4 minutes ago Up 4 minutes 8080/tcp, 8888/tcp, 23000/tcp, 0.0.0.0:22122->22122/tcp tracker-test
# 進入tracker容器
[[email protected] /tracker]# vim enter.sh
docker exec -it tracker-test /bin/bash
[[email protected] /tracker]# sh enter.sh
22122
埠需要在公網安全組上開放埠。以便外部訪問Tracker。如果無需外部訪問可以不需要開放。
2.2 、安裝storage容器
/docker/fastdfs/storage/start.sh
執行
storage
儲存卷服務,預設埠為23000
,對映/docker/volumes/fastdfs/storage
以保留資料和日誌storage中預設安裝的nginx的埠是
8888
,位置在容器內/usr/local/nginx/conf/nginx.conf
[[email protected] /]# mkdir -p /docker/fastdfs/storage
[[email protected] /storage]# cd /docker/fastdfs/storage
# 建立宿主機器掛載點,保證容器資料可以持續化儲存
[[email protected] /]# mkdir -p /docker/volumes/fastdfs/storage
# 啟動指令碼
[[email protected] /storage]# vim start.sh
docker stop storage-test
docker rm storage-test
# 執行storage儲存服務, 繫結tracker跟蹤服務的ip, 彈性公網IP 124.71.*.*(或者內網私有IP 192.168.*.*)
docker run -itd --name storage-test -p 8888:8888 -p 23000:23000 \
-e TRACKER_SERVER=彈性公網IP 124.71.*.*(或者內網私有IP 192.168.*.*):22122 \
-v /docker/volumes/fastdfs/storage:/var/fdfs delron/fastdfs storage
------------------------------------------------
# 啟動storage容器
[[email protected] /storage]# sh start.sh
# 檢視容器執行
[[email protected] storage]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
407659b39e5e delron/fastdfs "/usr/bin/start1.sh …" 14 minutes ago Up 14 minutes 8080/tcp, 8888/tcp, 23000/tcp, 0.0.0.0:22122->22122/tcp tracker-test
ead353c90fd5 delron/fastdfs "/usr/bin/start1.sh …" 25 minutes ago Up 25 minutes 8080/tcp, 0.0.0.0:8888->8888/tcp, 22122/tcp, 0.0.0.0:23000->23000/tcp storage-test
# 進入storage容器
[[email protected] /storage]# vim enter.sh
docker exec -it storage-test /bin/bash
[[email protected] /storage]# sh enter.sh
[[email protected] nginx-1.12.2]# cat /usr/local/nginx/conf/nginx.conf
....
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
.....
# 如果想更改nginx的埠,可以在這裡修改
# 注意
# TRACKER_SERVER=內網私有IP 192.168.*.*:22122 時,外部無法測試訪問strorage進行上傳下載,只能在內部進行測試
# 這點在部署測試環境和生產環境時,要注意區分
23000 8888
埠需要在公網安全組上開放埠。以便外部訪問Storage。如果無需外部訪問可以不需要開放。
2.3、部署順序
先部署tracker,再部署storage
所以可以寫一個啟動指令碼
/docker/fastdfs/start.sh
[[email protected] fastdfs]# pwd
/docker/fastdfs
[[email protected] fastdfs]# vim start.sh
sh ./tracker/start.sh
sh ./storage/start.sh
2.4、Storage測試
進入Storage容器進行上傳檔案測試。
[[email protected] /storage]# sh enter.sh
[[email protected] nginx-1.12.2]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf README
group1/M00/00/00/rBEABl_r6uaAPq37AAAAMT6WPfM6698716
此時將檔案已上傳至檔案系統,並在執行該語句後返回圖片儲存的URL。
所以此刻如果在已經開放了8888
埠,就可以訪問http://你的伺服器IP:8888/group1/M00/00/00/rBEABl_r6uaAPq37AAAAMT6WPfM6698716
下載這個檔案
測試通過
我們退出容器,到宿主的掛載點檢視
[[email protected] storage]# ll /docker/volumes/fastdfs/storage/data/00/00/
-rw-r--r-- 1 root root 49 Dec 30 10:50 rBEABl_r6uaAPq37AAAAMT6WPfM6698716
2.5、總結
到此為止一個fastDFS
分散式檔案系統搭建完畢。至於關於 埠22122、23000、8888是否要需要開放
,就要視情況而定,如果是生產環境,為了安全,只需要開放一個java客戶端的埠和一個其他的nginx伺服器埠,22122、23000、8888
全部不開放。
java client 相關配置
測試環境配置
這時候:22122、23000需要開發埠。
啟動Stroage容器時,-e TRACKER_SERVER=彈性公網IP 124.71.0.0:22122
fastdfs.connect_timeout_in_seconds = 60
fastdfs.network_timeout_in_seconds = 60
fastdfs.charset = UTF-8
fastdfs.http_tracker_http_port = 8080
fastdfs.tracker_servers = 124.71.*.*:22122
生產環境配置
這時候:22122、23000不需要開發埠。
啟動Stroage容器時,-e TRACKER_SERVER=內網網IP 192.168.0.0:22122
fastdfs.connect_timeout_in_seconds = 60
fastdfs.network_timeout_in_seconds = 60
fastdfs.charset = UTF-8
fastdfs.http_tracker_http_port = 8080
fastdfs.tracker_servers = 127.0.0.1:22122