首页 > 其他分享 >【FastDfs】Docker自定义构建ARM架构的FastDfs镜像

【FastDfs】Docker自定义构建ARM架构的FastDfs镜像

时间:2022-12-02 17:37:58浏览次数:61  
标签:git 自定义 FastDfs fastdfs nginx sh usr 镜像 Docker

由于服务器环境为ARM架构,在部署fastdfs时,发现网上的镜像几乎都是X86_64的,不同架构的镜像还不能通用,这个就有点烦了。。。。。

由于之前没有从头编译制作过镜像,步步都是坑,在折腾了几天之后,终于倒腾出来了,这里记录下构建过程。可以举一反三,定制自己的镜像。

这里贴一下官方的原贴:happyfish100/fastdfs,目前的源码,按照这个部署还是没问题的。

这里贴一下已经打包好的镜像,可直接拉取使用:docker pull onlyonelmm/fastdfs-arm64,使用方法可参考:https://hub.docker.com/r/onlyonelmm/fastdfs-arm64

下面是制作该镜像的过程。

1. 环境准备

1.1 下载源码包

拉取官方模块代码工具包,这里推荐使用github下载最新版代码,其中,我们需要的是这三个
【FastDfs】Docker自定义构建ARM架构的FastDfs镜像_fastdfs
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:7

MAINTAINER lmm "[email protected]"

WORKDIR /

ADD libfastcommon /usr/local/src/libfastcommon

ADD fastdfs /usr/local/src/fastdfs

ADD fastdfs-nginx-module /usr/local/src/fastdfs-nginx-module

ADD 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 #切换到安装目录准备下载安装包
  1. 初始化编译环境:
yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
  1. 编译安装 libfastcommon :
cd libfastcommon/
./make.sh && ./make.sh install #编译安装
  1. 安装FastDFS
cd ../ #返回上一级目录
git clone https://github.com/happyfish100/fastdfs.git --depth 1
cd fastdfs/
./make.sh && ./make.sh install #编译安装
  1. 安装fastdfs-nginx-module
cd ../ #返回上一级目录
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
  1. 安装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 '编译完成,默认配置' 80a87ad6b80e  fastdfs:V1.0.3

接着可再次编写构建脚本,以 fastdfs:V1.0.3 为基础镜像进行构建。

首先编写启动软件的脚本:fastdfs_start.sh

#!/bin/sh

mkdir -p /home/fastdfs

new_val=$FASTDFS_IPADDR
old="192.168.0.165"

new_WEB_PORT=$WEB_PORT
old_WEB_PORT="8888"

echo 'FASTDFS_IPADDR=' ${new_val}
echo 'WEB_PORT=' ${new_WEB_PORT}

sed -i "s/$old/$new_val/g" /etc/fdfs/client.conf
sed -i "s/$old/$new_val/g" /etc/fdfs/storage.conf
sed -i "s/$old/$new_val/g" /etc/fdfs/mod_fastdfs.conf

sed -i "s/$old_WEB_PORT/$new_WEB_PORT/g" /usr/local/nginx/conf/nginx.conf

echo "start trackerd"
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

echo "start storage"
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
 
echo "start nginx"
/usr/local/nginx/sbin/nginx 
 
tail -f  /dev/null

这里加入了动态参数:FASTDFS_IPADDRWEB_PORT,并赋予默认值,可接收启动命令中的 -e后面指定的参数值。

新建 Dockerfile : vi Dockerfile

MAINTAINER lmm "[email protected]"

WORKDIR /

ADD fastdfs_start.sh /home/fastdfs_start.sh

RUN chmod u+x /home/fastdfs_start.sh

EXPOSE 80 8888 23000 22122

# 设置环境变量 USERNAME 默认值为 admin,后面可以通过docker run -e USERNAME="XXXXXX"修改,这个环境变量在容器里也可以$USERNAME获取
ENV FASTDFS_IPADDR=192.168.0.165 WEB_PORT=8888

CMD ["/home/fastdfs_start.sh"]

构建镜像:docker build -t fastdfs:V1.0.4 ., 此时最终的镜像构建完成。

其中从 fastdfs:V1.0.3fastdfs: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

标签:git,自定义,FastDfs,fastdfs,nginx,sh,usr,镜像,Docker
From: https://blog.51cto.com/linmengmeng/5907323

相关文章

  • Docker swarm 安装MySQL集群
    这里直接采用的是5.7.24版本的MySQL初始化dockerswarm:dockerswarminit正常会显示当前服务器作为leader,然后打印出来加入此dockerswarm的token。我这里执行过了,使用d......
  • docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面
    1、从容器里面拷文件到宿主机?在宿主机里面执行如下命令:dockercp容器名:要拷贝的文件在容器里面的路径要拷贝到宿主机的相应路径假设容器名为testtomcat,要从容器里面......
  • 内网服务器搭建docker环境
    1.x86_64服务器安装docker1.下载docker安装包下载地址:https://download.docker.com/linux/static/stable/x86_64/这里可以看到很多docker版本的压缩包。我这里下......
  • 如何使用 Docker 私有化部署 GitLab 教程 All In One
    如何使用Docker私有化部署GitLab教程AllInOneCI/CDGitLabInstallself-managedGitLabSelf-managed–installonyourowninfrastructurehttps://abou......
  • Deepin系统安装docker
    docker安装Deepin软件仓库有Docker,可以通过一键脚本安装1.安装dockersudoapt-getupdatesudoapt-getinstalldocker-cedocker-v2.授权普通用户运行dockersudo......
  • Deepin系统安装Java、maven、svn、git、eclipse svn插件、docker
    目录jdk、Maven安装svn、git安装eclipse、IDEA安装docker安装jdk、Maven安装下载jdk、Mavenjdk下载地址|maven下载安装配置对下载好的jdk、maven压缩包解压,移动到......
  • vue3自定义修饰符
    v-model 有一些内置的修饰符,例如 .trim,.number 和 .lazy都是对输入的数据做过滤处理vue也可以自定义实现创建一个自定义的修饰符 capitalize,它会自动将 v-model......
  • vue3 实现自定义 v-model
    在vue中,form表单输入可以通过v-model实现双向数据绑定,例如:<inputv-model="text"/>{{text}}在表单中输入时,页面展示的data-text也会相应改变如果是封装......
  • .NET CORE读取自定义配置文件到Configuration中
    微软只提供了以下可以读取配置的方式,其中文件配置只能读取INI、JSON和XML文件,如果我想对其他自定义文件进行读取,那么我们可以使用自定义配置提供程序进行配置  比如,......
  • JAVA面试题--Docker
    Docker1.什么Docker2.Docker与虚拟机有何不同3.什么是Docker镜像4.什么是Docker容器5.Docker容器有几种状态6.DockerFile中最常见的指定是什么?7.DockerFile中的命......