1. 程式人生 > 其它 >如何使用Docker容器安裝FastDFS

如何使用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