由于服务器环境为ARM架构,在部署fastdfs时,发现网上的镜像几乎都是X86_64的,不同架构的镜像还不能通用,这个就有点烦了。。。。。
由于之前没有从头编译制作过镜像,步步都是坑,在折腾了几天之后,终于倒腾出来了,这里记录下构建过程。可以举一反三,定制自己的镜像。
这里贴一下官方的原贴:happyfish100/fastdfs,目前的源码,按照这个部署还是没问题的。
这里贴一下已经打包好的镜像,可直接拉取使用:docker pull onlyonelmm/fastdfs-arm64
,使用方法可参考:https://hub.docker.com/r/onlyonelmm/fastdfs-arm64
下面是制作该镜像的过程。
1. 环境准备
1.1 下载源码包
拉取官方模块代码工具包,这里推荐使用github下载最新版代码,其中,我们需要的是这三个
fastdfs:
git clone https://github.com/happyfish100/fastdfs.git --depth 1
fastdfs-nginx-module
git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
libfastcommon
git clone https://github.com/happyfish100/libfastcommon.git --depth 1
如果提示 git clone 出现fatal: unable to access ‘https://github ,将上面地址git clone https
换成 git clone git
下载nginx压缩包
wget http://nginx.org/download/nginx-1.15.4.tar.gz
2. 初步构建只包含安装包的基础镜像
下载完成后,开始编写 Dockerfile :vi Dockerfile
FROM centos:7MAINTAINER lmm "1632284989@qq.com"WORKDIR /ADD libfastcommon /usr/local/src/libfastcommonADD fastdfs /usr/local/src/fastdfsADD fastdfs-nginx-module /usr/local/src/fastdfs-nginx-moduleADD nginx-1.15.4.tar.gz /usr/local/src
这里先制作一个基础镜像
,将源码包整到镜像里面。构建基础镜像:docker build -t fastdfs:V1.0.0 .
注意这里最后的点,表示在当前目录下构建镜像。
这里并没有直接编译,等会可以进入容器里面手动编译,如果编译出错,可以直接使用基础镜像重新启动一个容器。
使用docker images
可以看到镜像 fastdfs:V1.0.0
2. 在基础镜像上编译安装所需软件
接着以交互式的方式运行上面的基础镜像:docker run -itd --name fastdfs_container fastdfs:V1.0.0 /bin/bash
进入容器内部,到特定文件夹下手动编译:
mkdir /home/fastdfs #创建数据存储目录cd /usr/local/src #切换到安装目录准备下载安装包
- 初始化编译环境:
yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
- 编译安装
libfastcommon
:
cd libfastcommon/./make.sh && ./make.sh install #编译安装
- 安装FastDFS
cd ../ #返回上一级目录git clone https://github.com/happyfish100/fastdfs.git --depth 1cd fastdfs/./make.sh && ./make.sh install #编译安装
- 安装fastdfs-nginx-module
cd ../ #返回上一级目录cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
- 安装nginx
cd nginx-1.15.4/#添加fastdfs-nginx-module模块./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ make && make install #编译安装
至此编译构建完成,可以提交容器为新的镜像,留存下来。
docker commit -a 'linmengmeng' -m '编译完成,默认配置' 80a87ad6b80efastdfs:V1.0.3
接着可再次编写构建脚本,以 fastdfs:V1.0.3
为基础镜像进行构建。
首先编写启动软件的脚本:fastdfs_start.sh
#!/bin/shmkdir -p /home/fastdfsnew_val=$FASTDFS_IPADDRold="192.168.0.165"new_WEB_PORT=$WEB_PORTold_WEB_PORT="8888"echo 'FASTDFS_IPADDR=' ${new_val}echo 'WEB_PORT=' ${new_WEB_PORT}sed -i "s/$old/$new_val/g" /etc/fdfs/client.confsed -i "s/$old/$new_val/g" /etc/fdfs/storage.confsed -i "s/$old/$new_val/g" /etc/fdfs/mod_fastdfs.confsed -i "s/$old_WEB_PORT/$new_WEB_PORT/g" /usr/local/nginx/conf/nginx.confecho "start trackerd"/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restartecho "start storage"/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart echo "start nginx"/usr/local/nginx/sbin/nginxtail -f/dev/null
这里加入了动态参数:FASTDFS_IPADDR
和 WEB_PORT
,并赋予默认值,可接收启动命令中的 -e后面指定的参数值。
新建 Dockerfile
: vi Dockerfile
MAINTAINER lmm "1632284989@qq.com"WORKDIR /ADD fastdfs_start.sh /home/fastdfs_start.shRUN chmod u+x /home/fastdfs_start.shEXPOSE 80 8888 23000 22122# 设置环境变量 USERNAME 默认值为 admin,后面可以通过docker run -e USERNAME="XXXXXX"修改,这个环境变量在容器里也可以$USERNAME获取ENV FASTDFS_IPADDR=192.168.0.165 WEB_PORT=8888CMD ["/home/fastdfs_start.sh"]
构建镜像:docker build -t fastdfs:V1.0.4 .
, 此时最终的镜像构建完成。
其中从 fastdfs:V1.0.3
到 fastdfs:V1.0.4
的过程是一个逐渐调试的过程,进入 fastdfs:V1.0.3
的容器里面,手动调试,然后修改 fastdfs_start.sh
脚本的内容。最终才有了正常的 fastdfs:V1.0.4
版本镜像。
调试了半天,整的眼都花了。。。。。。。
2022-11-09
如果项目中对文件服务器选型未确定的,可以看下Minio,这玩意作为一个轻量级的文件服务器也是蛮好用的。感兴趣的可以瞅一眼:http://docs.minio.org.cn/docs/master/minio-deployment-quickstart-guide