华为云下 Centos7+ docker搭建fastdfs文件系统
关于FastDFS
FastDFS 是以 C 语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载)等,特别适合以文件为载体的在线服务,如:图片网站,视频网站等。
外话:FastDFS 是阿里余庆大神做的一个个人项目,从2008年研发FastDFS开源至今,在一些互联网创业公司中备受推崇,GitHub开源地址:https://github.com/happyfish100/fastdfs
搜索镜像
docker search fastdfs
- 显示效果图
安装镜像,一定要安装镜像season/fastdfs:1.2,外网访问配置nginx时用到
docker pull season/fastdfs:1.2
创建容器并挂载目录
在创建容器之前我们先简单说一下 FastDFS,FastDFS 系统有三个角色:
- 跟踪服务器(Tracker Server):跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
- 存储服务器(Storage Server):存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
- 客户端(Client):上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
创建出所需要的目录
mkdir -p /diskdata/fdfs/tracker/data
mkdir -p /diskdata/fdfs/storage/data
mkdir -p /diskdata/fdfs/storage/path
创建tracker容器(跟踪服务器容器)
docker run -id --name tracker \
-p 22122:22122 \
--restart=always --net host \
-v /diskdata/fdfs/tracker/data:/fastdfs/tracker/data \
season/fastdfs:1.2 tracker
- 参数解释
- -d:让容器在后台运行
- -p:指定容器内部使用的网络端口映射到我们使用的主机上
- --name:指定容器创建的名称
- -v:容器跟宿主机之间的挂载目录
创建storage容器(存储服务器容器)
docker run -id --name storage \
--restart=always --net host \
-v /diskdata/fdfs/storage/data:/fastdfs/store_path \
-e TRACKER_SERVER="192.168.3.52:22122" \
season/fastdfs:1.2 storage
client测试
docker exec -it tracker bash
cd /etc/fdfs/
ls
cat client.conf
输出的 client.conf 都是默认配置,我们可以找到其中的 track_server 地址:
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 bash 进入 tracker 容器后不能使用 vi vim 命令,所以干脆将 client.conf 配置文件复制出来,在宿主机修改完再粘贴回去
docker cp tracker:/etc/fdfs/client.conf /diskdata/fdfs/
修改完之后复制到docker容器
docker cp /diskdata/fdfs/client.conf tracker:/etc/fdfs
文件上传测试
docker exec -it tracker bash
echo "aaaaa" > aaaa.txt
fdfs_upload_file /etc/fdfs/client.conf aaaa.txt
- 如果此时报了如下错误:
执行命令
mkdir -p /home/yuqing/fastdfs
验证是否成功
配置Nginx
创建nginx目录
mkdir -p /diskdata/fdfs/nginx/
将storage容器中的nginx配置文件复制出来
docker cp storage:/etc/nginx/conf/nginx.conf /diskdata/fdfs/nginx/
修改nginx中的配置
vi /diskdata/fdfs/nginx/nginx.conf
找到local节点,修改为:
location / {
root /fastdfs/store_path/data;
ngx_fastdfs_module;
}
执行命令,TRACKER_SERVER指向自己设置的IP地址及端口
docker run -id --name fastdfs_ngin x \
--restart=always \
-v /diskdata/fdfs/storage/data:/fastdfs/store_path \
-v /diskdata/fdfs/nginx/nginx.conf:/etc/nginx/conf/nginx.conf \
-p 8888:80 \
-e TRACKER_SERVER=192.168.3.52:22122 \
season/fastdfs:1.2 nginx
至此所有操作都已做完,可以通过Nginx外网配置访问文件