FastDFS系统角色:
- 跟踪服务器(Tracker Server):跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
- 存储服务器(Storage Server):存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
- 客户端(Client):上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
注意:如果宿主机已经有fdfs一定要停止fdfs进程,否则docker容器storage上传的文件会存储到宿主机的指定目录,而不是docker容器中的storage.conf配置文件中指定目录。
查看进程:
# ps -ef | grep fdfs
root 28250 28230 0 09:19 ? 00:00:00 fdfs_trackerd /etc/fdfs/tracker.conf start
root 28263 28230 0 09:19 pts/0 00:00:00 tail -f /var/fdfs/logs/trackerd.log
root 28538 28512 2 09:20 ? 00:00:00 fdfs_storaged /etc/fdfs/storage.conf start
root 28553 28512 0 09:20 pts/0 00:00:00 tail -f /var/fdfs/logs/storaged.log
1.搜索镜像
执行命令:docker search fastdfs
NAME DESCRIPTION
season/fastdfs FastDFS
ygqygq2/fastdfs-nginx 整合了nginx的fastdfs
luhuiguo/fastdfs FastDFS is an open source high performance
morunchang/fastdfs A FastDFS image
delron/fastdfs
qbanxiaoli/fastdfs FastDFS+FastDHT(单机+集群版)
moocu/fastdfs fastdfs5.11
2.拉取镜像
执行命令:docker pull season/fastdfs:1.2
或者 docker pull
season/fastdfs镜像相对纯净些
信息:
Debian GNU/Linux 7 (wheezy)
FastDFS_v4.08
nginx-1.8.0
目录文件:
/fastdfs目录:client storage store_path tracker
/FastDFS_v4.08目录:COPYING-3_0.txt ,README conf ,php_client storage,HISTORY, client init.d,restart.sh, test,INSTALL, common ,make.sh ,stop.sh ,tracker
/etc/fdfs目录:client.conf http.conf mime.types storage.conf tracker.conf
/fdfs_conf目录:anti-steal.jpg,http.conf,mod_fastdfs.conf,storage_ids.conf,client.conf mime.types storage.conf,tracker.conf
docker pull delron/fastdfs镜像自带nginx
CentOS Linux release 7.4.1708 (Core)
FastDFS :v5.11
nginx version: nginx/1.12.2
docker.io/delron/fastdfs:latest
3.创建容器并挂载目录
- 创建所需要的目录(数据目录、数据存储目录)
执行命令:
#mkdir -p /usr/local/server/fastdfs/tracker/datamkdir -p /usr/local/server/fastdfs/storage/datamkdir -p /usr/local/server/fastdfs/storage/path
// -p 递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
- 创建tracker容器(跟踪服务器容器)
执行命令:
#docker run -itd --network=host --name tracker -v /home/docker/fdfs/tracker:/var/fdfs delron/fastdfs tracker
//默认端口是22122
#docker run -itd --name tracker \-p 22122:22122 \--restart=always --net host \-v /usr/local/server/fastdfs/tracker/data:/fastdfs/tracker/data \season/fastdfs:1.2 tracker
//命令参数
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
-t: 在新容器内指定一个伪终端或终端。
-d:让容器在后台运行
-p:指定容器内部使用的网络端口映射到我们使用的主机上
--name:指定容器创建的名称
-v:容器跟宿主机之间的挂载目录 (冒号":"前面的目录是宿主机目录,后面的目录是容器内目录)
--net:指定容器的网络模式
--restart=always docker重启容器自动重启
- 创建storage容器(存储服务器容器)
执行命令:
#docker run -itd --network=host --name storage -v /home/docker/fdfs/storage:/var/fdfs -e TRACKER_SERVER=*:22122 -e GROUP_NAME=group1 delron/fastdfs storage
#docker run -itd --name storage \--restart=always --net host \-v /home/docker/fastdfs/storage:/fastdfs/store_path \-e TRACKER_SERVER="*:22122" \season/fastdfs:1.2 storage
// 命令参数
-e 指定容器环境变量
-
client测试
两个容器创建完之后,但此时两个容器其实并没有关联起来,可以进入tracker容器,通过client.conf测试一下:
# docker exec -it tracker bash cd /etc/fdfs/lscat client.conf
输出的 client.conf 都是默认配置,tracker_server=192.168.209.121:22122
尝试执行一下连接:fdfs_monitor client.conf
会得到如下内容:
ERROR - file: ../common/connection_pool.c, line: 84, connect to 192.168.209.121:22122 fail, errno: 110, error info: Connection timed out
- 修改client.conf配置文件
docker exec -it tracker /bin/bash //进入tracker容器
进入容器后不能使用vi vim 命令
可以执行
rpm -qa|grep vim //检查
yum install vim-enhanced -y //安装
//vim-minimal-7.4.629-6.el7.x86_64
//vim-common-7.4.629-8.el7_9.x86_64
//vim-filesystem-7.4.629-8.el7_9.x86_64
//vim-enhanced-7.4.629-8.el7_9.x86_64
也可以将配置文件复制到宿主机,修改完后在粘贴回去
docker cp trakcer:/etc/fdfs/client.conf /usr/local/server/fastdfs/
修改后保存,然后将修改后的文件替换回去。指令命令:
docker cp /usr/local/server/fastdfs/client.conf tracker:/etc/fdfs
4.文件上传测试
执行命令:
docker exec -it tracker /bin/bash //tracker容器上传
echo "hello " > a.txt
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt(/home/11.png)
docker exec -it storage /bin/bash //storage容器上传
复制出这个文件名来:group1/M00/00/00/CtM3BF84iz2AWE_JAAAACBfWGpM793.txt,这个名称后面有用,将用作后面配置nginx时配置访问文件路径。
因为之前挂载了宿主机的目录,去 cd
/usr/local/server/fastdfs 看一下:
cd /usr/local/server/fastdfs/data/storage/data
ls
会得到有规律的文件夹
5.fdfs_monitor查看确认storage是否自动注册到tracker中
在storage容器或者tracker容器中运行fdfs_monitor /etc/fdfs/storage.conf
nginx
{
root /var/fdfs/data;
}
# find / -name nginx
/tmp/nginx
/tmp/nginx/nginx-1.12.2/objs/nginx
/usr/local/nginx
/usr/local/nginx/sbin/nginx
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"