Docker中搭建FastDFS文件系统(多图)

关于FastDFS

FastDFS 是以 C 语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载)等,特别适合以文件为载体的在线服务,如:图片网站,视频网站等。

外话:FastDFS 是阿里余庆大神做的一个个人项目,从2008年研发FastDFS开源至今,在一些互联网创业公司中备受推崇,GitHub开源地址:https://github.com/happyfish100/fastdfs

本文基于Docker搭建,以下是正文内容:

1、搜索镜像

执行命令:

docker search fastdfs

然后界面会搜出一大堆镜像,选哪个呢?

老规矩,我们选择start数最多的准没错,什么?start数不放心,怕被挂马?ok,我们再去镜像仓库看一下:

补充: 其实看这些镜像的描述也能看出一些区别来的,比如 ygqygq2/fastdfs-nginx,该镜像是整合了 Nginx 的 fastdfs,那么新的问题来了,为什么要整合 Nginx?因为对于 fastdfs 来说,安装后只能在本机访问… 我上传文件肯定是为了能够访问的呀,所以为了提供 web 访问,那么就需要集成 Nginx 了,但是比如就是想自己单独搞 Nginx… 那么肯定就不会选了嘛,season/fastdfs 镜像相对纯净些,本文就是基于 season/fastdfs 镜像的,后面也附带配置 Nginx…

2、安装镜像

执行命令:

docker pull season/fastdfs:1.2

之所以选择 1.2 版本,防止再次更新后本文不适合 latest 版本,执行截图如下:

3、创建容器并挂载目录

在创建容器之前我们先简单说一下 FastDFS,FastDFS 系统有三个角色:

  1. 跟踪服务器(Tracker Server):跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
  2. 存储服务器(Storage Server):存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
  3. 客户端(Client):上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

说到这就是想告诉小伙伴,接下来我们可能创建 跟踪服务器容器存储服务器容器客户端容器 这三个容器…

3.1、创建出所需要的目录

我们先把需要的一些目录创建出来(数据目录、数据存储目录等),执行命令:

mkdir -p /usr/local/server/fastdfs/trakcer/data
mkdir -p /usr/local/server/fastdfs/storage/data
mkdir -p /usr/local/server/fastdfs/storage/path

3.2、创建trakcer容器(跟踪服务器容器)

执行命令:

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:让容器在后台运行
  • -p:指定容器内部使用的网络端口映射到我们使用的主机上
  • –name:指定容器创建的名称
  • -v:容器跟宿主机之间的挂载目录

3.3、创建storage容器(存储服务器容器)

执行命令(非最终执行命令,请修改为自己的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测试

两个容器创建完之后,但此时两个容器其实并没有关联起来,我们进入tracker容器,通过client.conf测试一下:

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配置之前,默认 tracker 是去连接 192.168.209.121 地址的,那么接下来就是需要去配置client配置文件了。

3.4、修改client.conf配置文件

通过 docker exec -it tracker bash 进入 tracker 容器后不能使用 vi vim 命令,所以干脆将 client.conf 配置文件复制出来,在宿主机修改完再粘贴回去。

执行命令:

docker cp trakcer:/etc/fdfs/client.conf /usr/local/server/fastdfs/

我们通过 docker 指令将配置文件复制到 /usr/local/server/fastdfs/ 目录。

我们编辑这个文件,修改 tracker_url 地址(vi client.conf):

修改后保存,然后将修改后的文件替换回去。指令命令:

docker cp /usr/local/server/fastdfs/client.conf tracker:/etc/fdfs 

至此,配置文件修改完了,接下来我们创建文件上传测试一下。

4、文件上传测试

执行命令,进入 tracker 容器中:

docker exec -it tracker bash

随便创建一个 txt 文件:

echo "niceyoo" > niceyoo.txt

然后通过 fdfs_upload_file 命令将 niceyoo.txt 文件上传至服务器:

fdfs_upload_file /etc/fdfs/client.conf niceyoo.txt

如果此时报了如下错误:

那么就创建一下这个路径,没有的跳过:

mkdir -p /home/yuqing/fastdfs

创建目录后重新尝试提交:

我们复制出这个文件名来:group1/M00/00/00/CtM3BF84iz2AWE_JAAAACBfWGpM793.txt,这个名称后面有用,将用作后面配置nginx时配置访问文件路径。

因为我们之前挂载了宿主机的目录,我们去 cd /usr/local/server/fastdfs 看一下:

cd /usr/local/server/fastdfs/data/storage/data
ls

输出内容如下:

5、配置Nginx

前面的补充已经提到了,默认上传的文件是只能在本机访问的,当然这样肯定是不行的,所以我们需要配置一下Nginx 来帮我们实现 Web 访问的效果。

创建nginx目录:

mkdir -p /usr/local/server/fastdfs/nginx/

将storage容器中的nginx配置文件复制出来:

docker cp storage:/etc/nginx/conf/nginx.conf /usr/local/server/fastdfs/nginx/

修改nginx中的配置:

vi /usr/local/server/fastdfs/nginx/nginx.conf

找到local节点,修改为:

 location / {root /fastdfs/store_path/data;ngx_fastdfs_module;}

相关截图如下:

接下来就是创建nginx容器,并指向刚刚的配置文件了。

没有安装过nginx的小伙伴同样可以执行如下指令,默认会帮你拉取镜像然后安装的。

注意:请修改ip地址后再执行

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

至此,我们查看一下目前创建以及启动的容器:

我们测试一下之前上传的文件 group1/M00/00/00/CtM3BF84iz2AWE_JAAAACBfWGpM793.txt,执行如下命令:

curl -i http://127.0.0.1:8888/group1/M00/00/00/CtM3BF84iz2AWE_JAAAACBfWGpM793.txt

执行结果:

至此,整个过程就搭建成功了,我们通过浏览器访问一下:

搭建完成怎么在项目当中使用呢?

SpringBoot集成FastDFS依赖实现文件上传

你知道的越多,不知道的就越多,欢迎关注我的微信公众号:niceyoo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot集成FastDFS依赖实现文件上传

前言 对FastDFS文件系统安装后的使用。 FastDFS的安装请参考这篇&#xff1a;https://www.cnblogs.com/niceyoo/p/13511082.html 本文环境&#xff1a;IDEA JDK1.8 Maven 1、引入依赖 简单说一下这个依赖部分&#xff0c;目前大部分都是采用的如下依赖&#xff1a; <…

SQL取最大值编码(自动编码)

SQL取最大值编码(自动编码) 用途 : 使用SQL语法做出自动编码效果&#xff0c;例如将单号自动1后&#xff0c;产生该笔单号 Table说明 SQL语法 SELECT AREPLICATE(0,7-len(convert(varchar,((MAX(right(ae002,7)))1))))(convert(varchar,((MAX(right(ae002,7)))1))) from ygmae …

微信小程序里如何使用npm?小程序集成友盟举例

1、执行npm初始化指令 小程序根目录&#xff0c;命令执行如下指令&#xff1a; npm init执行后会让加载项目初始信息&#xff0c;具体截图如下&#xff1a; 2、执行安装npm包指令 在这我们举个例子&#xff0c;以接入友盟统计SDK为例&#xff0c;执行命令如下&#xff1a;…

Spring MVC 5 + Thymeleaf 基于Java配置和注解配置

Spring MVC 5 Thymeleaf 注解配置 Spring的配置方式一般为两种&#xff1a;XML配置和注解配置 Spring从3.0开始以后&#xff0c;推荐使用注解配置&#xff0c;这两种配置的优缺点说的人很多&#xff0c;我就不说了&#xff0c;自行体会&#xff0c;下面就用注解配置实现一个Sp…

docker镜像无法删除 Error:No such image:xxxxxx

1、前言 docker镜像无法删除&#xff0c;通过 docker images 查看镜像明明存在就是删除不了。 删除提示&#xff1a;Error&#xff1a;No such image&#xff1a;xxxxxxx 具体截图内容如下&#xff1a; 2、解决方法 进入目录&#xff1a; cd /var/lib/docker/image/over…

python中集合set,字典dict和列表list的区别以及用法

python中set代表集合&#xff0c;list代表列表,dict代表字典 set和dict的区别在于&#xff0c;dict是存储key-value&#xff0c;每一个key都是唯一的&#xff0c;set相对于dict存储的是key&#xff0c;且key是唯一的,list除了变量外都可以存储 dict{"a":1,"b&qu…

第6课 仿Siri机器人-语音朗读和语音识别

一、功能设计输入文本&#xff0c;单击“朗读”按钮&#xff0c;由手机读出该文本&#xff08;如果没有输入文本&#xff0c;则弹出消息框警告“请输入文本&#xff09;&#xff1b;单击“识别”按钮&#xff0c;读入语音&#xff0c;从文本框中输出文字。&#xff08;另&#…

口述完SpringMVC执行流程,面试官就让同事回家等消息了

Srping MVC 执行流程真的是老生常谈的话题了&#xff0c;最近同事小刚出去面试&#xff0c;前面面试官相继问了几个 Spring 相关的问题&#xff0c;但当面试官问他&#xff0c;你知道 Srping MVC 的执行流程吗&#xff1f;小刚娴熟的巴拉巴拉回答完后&#xff0c;面试官就让他回…

C++ 判断系统大小字节序

bool IsLitterEndian() {union UTest{std::uint16_t t;std::uint8_t c;} endianTest{ 0x01 };return (endianTest.c 0x01); } 转载于:https://www.cnblogs.com/fluteary/p/9178627.html

macos brew zookeeper,安装后zookeeper启动失败?

一、Zookeeper安装流程 执行如下安装命令&#xff1a; brew install zookeeper执行截图如下&#xff1a; 安装后查看 zookeeper 安装信息&#xff08;默认拉取最新版本&#xff09; brew info zookeeper执行截图如下&#xff1a; 二、Zookeeper启动、状态查询、及关闭 启…

为什么SimpleDateFormat不是线程安全的?

一、前言 日期的转换与格式化在项目中应该是比较常用的了&#xff0c;最近同事小刚出去面试实在是没想到被 SimpleDateFormat 给摆了一道… 面试官&#xff1a;项目中的日期转换怎么用的&#xff1f;SimpleDateFormat 用过吗&#xff1f;能说一下 SimpleDateFormat 线程安全问…

【Python 学习_第2周_程序代码】金角大王培训第二周练习_购物车代码,将写的代码和老师代码比较,记录下收获...

培训第二周&#xff0c;课堂练习为编写一段购物车代码&#xff0c;需求描述如下&#xff1a; 1.提示用户输入薪水 2.用户输入薪水后&#xff0c;打印商品编号、内容及价格 3.提醒用户输入商品代码&#xff0c;若余额大于等于商品价格&#xff0c;可购买&#xff1b;若小于&…

ActiveMQ Cannot send, channel has already failed: tcp:127.0.0.1:8161

仅针对如下错误内容&#xff1a; Cannot send, channel has already failed: tcp://127.0.0.1:8161一种尝试解决&#xff0c;修改连接端口为 61616&#xff1a; tcp://127.0.0.1:61616在没有修改过 ActiveMQ 配置文件情况下&#xff0c;默认 tcp 端口为 61616&#xff0c;htt…

pip安装报错处理+PyPi源切换教程

一、pip安装出错类型 1.1 pip版本过旧导致不能安装 报错提示&#xff1a; You are using pip version 9.0.3, however version 10.0.1 is available. You should consider upgrading via the python -m pip install --upgrade pip comm and. 可通过以下命令升级pip python -m p…

面试官:说一下List排序方法

1. 前言 排序算是比较高频的面试题了&#xff0c;节前面试了的两家公司都有问到排序问题&#xff0c;整理后分享给大家&#xff08;文末见总结&#xff09;。 通常我们想到实现排序就是 Collections 工具类的 sort() 方法&#xff0c;而 sort() 方法有两种&#xff1a; 直接调…

python之路——内置函数和匿名函数

楔子 在讲新知识之前&#xff0c;我们先来复习复习函数的基础知识。 问&#xff1a;函数怎么调用&#xff1f; 函数名() 如果你们这么说。。。那你们就对了&#xff01;好了记住这个事儿别给忘记了&#xff0c;咱们继续谈下一话题。。。 来你们在自己的环境里打印一下自己的名字…

SpringBoot打包成Docker镜像

1. 本文环境 Maven&#xff1a;3.6.3 &#xff08;Maven配置参考&#xff09; SpringBoot version&#xff1a;2.3.4.RELEASE Docker version&#xff1a; 19.03.11 &#xff08;Docker搭建参考&#xff09; JDK version&#xff1a;1.8.0_221 &#xff08;JDK搭建参考&…

Redis分布式锁—SETNX+Lua脚本实现篇

前言 平时的工作中&#xff0c;由于生产环境中的项目是需要部署在多台服务器中的&#xff0c;所以经常会面临解决分布式场景下数据一致性的问题&#xff0c;那么就需要引入分布式锁来解决这一问题。 针对分布式锁的实现&#xff0c;目前比较常用的就如下几种方案&#xff1a;…

Windows10远程报错:由于CredSSP加密Oracle修正

https://support.microsoft.com/zh-cn/help/4093492/credssp-updates-for-cve-2018-0886-march-13-2018 参照官方更新文件&#xff1a;查找办法 https://support.microsoft.com/zh-cn/help/4093492/&#xff0c;4093492是更新包kb后面的数字 修改办法&#xff1a;下图参照注册表…

Redis分布式锁—Redisson+RLock可重入锁实现篇

前言 平时的工作中&#xff0c;由于生产环境中的项目是需要部署在多台服务器中的&#xff0c;所以经常会面临解决分布式场景下数据一致性的问题&#xff0c;那么就需要引入分布式锁来解决这一问题。 针对分布式锁的实现&#xff0c;目前比较常用的就如下几种方案&#xff1a;…