一、什么是FastDFS
最近公司业务需求,需要搭建文件服务器,经过各种咨询和搜索,决定使用FastDFS。那FastDFS有什么优点呢?
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
更详细的大家可以参考:来自ityouknow的文章: 点击查看
二、如何使用docker镜像
为了更方便地集成到现有服务里,我们需要一个可以一键运行的docker镜像,但是网络上找了很多,有的把libfastcommon分离了,有的配置繁琐,都没有很好整合或者不满足业务需求。因此,接下来我们一步一步来写这个dockerfile来实现一键运行。
如果你比较懒,直接run下面的镜像就可以:
1 | 复制代码docker run -d annoak/fastdfs:latest \ |
如果需要自定义端口
1 | 复制代码docker run -d annoak/fastdfs:latest \ |
如果需要自定义HOST
- 第一种:[传入网络名,自动获取IP]
1 | 复制代码docker run -d annoak/fastdfs:latest \ |
- 第二种:[直接传入IP]
1 | 复制代码docker run -d annoak/fastdfs:latest \ |
如果不想映射端口直接使用宿主机网络:
1 | 复制代码docker run -d annoak/fastdfs:latest \ |
如果需要自定义nginx版本
1 | 复制代码docker run -d annoak/fastdfs:latest \ |
如果你使用的是docker-compose
1 | 复制代码services: |
如果你想知道它是怎么来的,请继续往下看:
三、如何编写dockerfile
- 第1步,当然是创建一个dockerfile文件,然后去看看我们需要用的软件版本。
依赖版本:libfastcommon和fastdfs的版本为master分支,nginx默认1.17.0,你懂的。
具体版本查看:
libfastcommon: 点击跳转
fastdfs: 点击跳转
nginx: 点击跳转
- 第2步,我们需要选择一个环境,嗯,我们选择最小的Linux -> alpine,现在dockerfile是这样的:
1 | 复制代码FROM alpine:3.7 |
- 第3步,定义几个全局变量吧
1 | 复制代码# 工作目录 |
- 第4步,我们需要安装一些编译期间的依赖软件,顺便更新下系统软件
1 | 复制代码# 创建目录 |
为什么要加–virtual .mybuilds,它是什么?
当您安装软件包时,这些软件包不会添加到全局软件包中。而且可以很容易地恢复。比如我需要gcc来编译程序,但是一旦程序被编译,我就不再需要gcc了。
- 第5步,我们需要检查一下目录,然后下载fastdfs的依赖libfastcommon并且编译安装
1 | 复制代码# 下载、安装libfastcommon |
- 第6步,下载、编译、安装fastdfs
1 | 复制代码# 下载、安装fastdfs |
- 第7步,配置一下fastdfs, 替换一下里面的路径/home/yuqing/fastdfs
1 | 复制代码# 配置fastdfs |
- 第8步,好了,接下来我们安装一下nginx和nginx插件
1 | 复制代码# 下载nginx插件 |
- 第9步,我们把nginx两兄弟一起编译安装下
1 | 复制代码# 将nginx和fastdfs的nginx插件编译 |
这时候,你大概会报错:No such file or directory #include “common_define.h” 这很致命,怎么解决呢?
我们需要改一下源码里的fastdfs-nginx-module-master/src/config文件
在dockerfile同目录下,新建一个文件:config,写入如下配置:
1 | 复制代码ngx_addon_name=ngx_http_fastdfs_module |
然后在dockerfile中编译那段之前,添加
1 | 复制代码# 修复编译找不到 #include "common_define.h"的致命问题 |
- 第10步,配置nginx和fastdfs环境,配置一下nginx
1 | 复制代码# 配置nginx和fastdfs环境,配置nginx |
第11步,我们很接近成功了,先清理下我们不会再用到的文件和软件
1 | 复制代码# 清理临时软件和文件 |
第12步,我们好像就差一个启动脚本了,接下来,写个启动脚本;这里需要注意NET_VAR变量,我在这里踩了个坑,默认是eth0,适合Linux,如果是mac,需要给它赋值en0,或者直接自定义:HOST_IP
1 | 复制代码# 创建启动脚本 |
第13步,好了,暴露端口,配置启动脚本,收工
1 | 复制代码# 暴露端口 |
- 总结:完整的dockerfile
1 | 复制代码FROM alpine:3.7 |
文件结构:
四、如何查看日志
脚本一个:
1 | 复制代码#!/bin/bash |
使用方法(记得给脚本赋执行权):
./log.sh tracker 或 storage 或 nginx
完
没有公众号,也没有二维码,也没有广告,仅此。
本文转载自: 掘金