Docker构建FastDFS镜像

https://blog.csdn.net/qq_26440803/article/details/83066132

Dockerfile

所需依赖:

    fastdfs
    libfastcommon
    fastdfs-nginx-module
    nginx

构建Dockerfile

    使用内置的微型Linux容器进行构建(alpine linux)

    alpine 适合用来做Docker镜像、路由器、防火墙、VPNs、VoIP 盒子 以及服务器的操作系统,基于 uClibc 和 Busybox

FROM alpine:3.6
MAINTAINER shenggangshu <shenggangshu7276@qq.com>
ENV HOME /root

    下载编译源码所需要的系统插件

    alpine 是使用apk来进行软件包管理的,类似于yum,apt等软件包管理工具。可以很方便的在线安装软件。

由于网络问题,建议使用国内镜像:https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.6/main
更多镜像请查看:https://mirrors.alpinelinux.org/

RUN apk update
    && apk add --no-cache  git gcc libc-dev make automake autoconf libtool pcre pcre-dev zlib zlib-dev openssl-dev wget vim --repository https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.6/main

    下载fastdfs、libfastcommon、nginx插件源码

RUN cd /root
    && git clone https://github.com/happyfish100/libfastcommon.git --depth 1
    && git clone https://github.com/happyfish100/fastdfs.git --depth 1
    && wget http://nginx.org/download/nginx-1.15.4.tar.gz
    && git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1

    安装libfastcommon

 RUN cd ${HOME}/libfastcommon/
    && ./make.sh 
    && ./make.sh install

    安装fastdfs
    编译fastdfs源文件,移动配置文件

RUN cd ${HOME}/fastdfs/
    && ./make.sh
    && ./make.sh install
    && cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
    && cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
    && cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
    && cp ${HOME}/fastdfs/conf/http.conf /etc/fdfs/
    && cp ${HOME}/fastdfs/conf/mime.types /etc/fdfs/
    && sed -i "s|/home/yuqing/fastdfs|/var/local/fdfs/tracker|g" /etc/fdfs/tracker.conf
    && sed -i "s|/home/yuqing/fastdfs|/var/local/fdfs/storage|g" /etc/fdfs/storage.conf
    && sed -i "s|/home/yuqing/fastdfs|/var/local/fdfs/storage|g" /etc/fdfs/client.conf

    安装nginx

RUN cd ${HOME}
    && tar -zxvf nginx-1.15.4.tar.gz 
    && cd nginx-1.15.4/
    && ./configure --add-module=${HOME}/fastdfs-nginx-module/src/
    && make
    && make install

    设置nginx和fastdfs联合环境,并配置nginx

RUN cp ${HOME}/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
    && sed -i "s|^store_path0.*$|store_path0=/var/local/fdfs/storage|g" /etc/fdfs/mod_fastdfs.conf
    && sed -i "s|^url_have_group_name =.*$|url_have_group_name = true|g" /etc/fdfs/mod_fastdfs.conf
    && cd ${HOME}/fastdfs/conf/
    && echo -e "
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        server {
            listen 8888;
            server_name localhost;
            location ~ /group[0-9]/M00 {
                ngx_fastdfs_module;
            }
        }
    }">/usr/local/nginx/conf/nginx.conf


    删除源码文件

RUN rm -rf ${HOME}/*

    1

    配置启动脚本

# 默认nginx端口
ENV WEB_PORT 8888
# 默认fastdfs端口
ENV FDFS_PORT 22122
# 创建启动脚本
RUN     echo -e "
mkdir -p /var/local/fdfs/storage/data /var/local/fdfs/tracker;
ln -s /var/local/fdfs/storage/data/ /var/local/fdfs/storage/data/M00;
sed -i "s/listen .*$/listen $WEB_PORT;/g" /usr/local/nginx/conf/nginx.conf;
sed -i "s/http.server_port=.*$/http.server_port=$WEB_PORT/g" /etc/fdfs/storage.conf;
if [ "$IP" = "" ]; then
    IP=`ifconfig eth0 | grep inet | awk '{print $2}'| awk -F: '{print $2}'`;
fi
sed -i "s/^tracker_server=.*$/tracker_server=$IP:$FDFS_PORT/g" /etc/fdfs/client.conf;
sed -i "s/^tracker_server=.*$/tracker_server=$IP:$FDFS_PORT/g" /etc/fdfs/storage.conf;
sed -i "s/^tracker_server=.*$/tracker_server=$IP:$FDFS_PORT/g" /etc/fdfs/mod_fastdfs.conf;
/etc/init.d/fdfs_trackerd start;
/etc/init.d/fdfs_storaged start;
/usr/local/nginx/sbin/nginx;
tail -f /usr/local/nginx/logs/access.log
">/start.sh
&& chmod u+x /start.sh

# 暴露端口。改为采用host网络,不需要单独暴露端口
# EXPOSE 80 22122

ENTRYPOINT ["/bin/bash","/start.sh"]

docker-compose.yaml配置

version: '3.0'
services:
  fastdfs:
    build: .
    image: haloo/fastdfs:5.11
    # 该容器是否需要开机启动+自动重启。若需要,则取消注释。
    #restart: always
    container_name: fastdfs
    environment:
    # nginx服务端口
    - WEB_PORT=80
    # docker所在主机的IP地址
    - IP=192.168.2.222
    volumes:
    # 将本地目录映射到docker容器内的fastdfs数据存储目录,将fastdfs文件存储到主机上,以免每次重建docker容器,之前存储的文件就丢失了。
    - ${HOME}/docker-data/fdfs:/var/local/fdfs
    # 使docker具有root权限以读写主机上的目录
    privileged: true
    # 网络模式为host,即直接使用主机的网络接口
    network_mode: "host"



开始构建

    查看文件结构

[root@localhost software]# tree
.
└── fdfs
    ├── docker-compose.yaml
    └── Dockerfile


    创建挂载文件夹

mkdir -p ${HOME}/docker-data/fdfs


    构建

docker-compose up -d


    查看容器

docker ps


在这里插入图片描述

    管理容器

    停止容器

docker stop <容器NAMES,也可以为容器ID的前几位>
docker-compose stop


    更改compose或Dockerfile后重新生成并运行

 docker-compose stop
 docker-compose build
 docker-compose up -d


一键式构建:

docker-compose up -d --build


    删除容器

docker rm <容器NAMES,也可以为容器ID的前几位>
docker-compose rm


检测

访问fastdfs所在地址:
192.168.2.222
在这里插入图片描述
可以看见,由于docker-compose.yaml配置的nginx代理地址为80,所以我们可以直接在外部浏览器上直接访问。
在这里不需要进行端口的暴露,因为我们使用的是网络模式为host,即直接使用主机的网络接口,如果想要开启暴露端口的模式,需要开启EXPOSE 80 22122

docker命令:

docker run -d --name=xxx -p 80:80 <imagesName>:<tag>

    1

完整配置

FROM alpine:3.6

MAINTAINER shenggangshu <shenggangshu7276@qq.com>

ENV HOME /root

#安装准备
RUN apk update
    && apk add --no-cache  git gcc gcc-c++ make automake autoconf libtool pcre pcre-dev zlib zlib-dev openssl-dev wget vim --repository https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.6/main


#下载fastdfs.libfastcommon.nginx插件源码
RUN cd /root
    && git clone https://github.com/happyfish100/libfastcommon.git --depth 1
    && git clone https://github.com/happyfish100/fastdfs.git --depth 1
    && wget http://nginx.org/download/nginx-1.15.4.tar.gz
    && git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1

 # 安装libfastcommon
 RUN cd ${HOME}/libfastcommon/
    && ./make.sh 
    && ./make.sh install

# 安装fastdfs
RUN cd ${HOME}/fastdfs/
    && ./make.sh
    && ./make.sh install
    && cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
    && cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
    && cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
    && cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/
    && cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/
    && sed -i "s|/home/yuqing/fastdfs|/var/local/fdfs/tracker|g" /etc/fdfs/tracker.conf
    && sed -i "s|/home/yuqing/fastdfs|/var/local/fdfs/storage|g" /etc/fdfs/storage.conf
    && sed -i "s|/home/yuqing/fastdfs|/var/local/fdfs/storage|g" /etc/fdfs/client.conf

# 获取nginx源码
RUN cd ${HOME}
    && tar -zxvf nginx-1.15.4.tar.gz 
    && cd nginx-1.15.4/
    && ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/
    && make
    && make install

# 设置nginx和fastdfs联合环境,并配置nginx
RUN cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
    && sed -i "s|^store_path0.*$|store_path0=/var/local/fdfs/storage|g" /etc/fdfs/mod_fastdfs.conf
    && sed -i "s|^url_have_group_name =.*$|url_have_group_name = true|g" /etc/fdfs/mod_fastdfs.conf
    && cd ${HOME}/fastdfs/conf/
    && echo -e "
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        server {
            listen 8888;
            server_name localhost;
            location ~ /group[0-9]/M00 {
                ngx_fastdfs_module;
            }
        }
    }">/usr/local/nginx/conf/nginx.conf

# 清理文件
RUN rm -rf ${HOME}/*

# 配置启动脚本,在启动时中根据环境变量替换nginx端口、fastdfs端口
# 默认nginx端口
ENV WEB_PORT 8888
# 默认fastdfs端口
ENV FDFS_PORT 22122

# 创建启动脚本
RUN     echo -e "
mkdir -p /var/local/fdfs/storage/data /var/local/fdfs/tracker;
ln -s /var/local/fdfs/storage/data/ /var/local/fdfs/storage/data/M00;
sed -i "s/listen .*$/listen $WEB_PORT;/g" /usr/local/nginx/conf/nginx.conf;
sed -i "s/http.server_port=.*$/http.server_port=$WEB_PORT/g" /etc/fdfs/storage.conf;
if [ "$IP" = "" ]; then
    IP=`ifconfig eth0 | grep inet | awk '{print $2}'| awk -F: '{print $2}'`;
fi
sed -i "s/^tracker_server=.*$/tracker_server=$IP:$FDFS_PORT/g" /etc/fdfs/client.conf;
sed -i "s/^tracker_server=.*$/tracker_server=$IP:$FDFS_PORT/g" /etc/fdfs/storage.conf;
sed -i "s/^tracker_server=.*$/tracker_server=$IP:$FDFS_PORT/g" /etc/fdfs/mod_fastdfs.conf;
/etc/init.d/fdfs_trackerd start;
/etc/init.d/fdfs_storaged start;
/usr/local/nginx/sbin/nginx;
tail -f /usr/local/nginx/logs/access.log
">/start.sh
&& chmod u+x /start.sh

# 暴露端口。改为采用host网络,不需要单独暴露端口
# EXPOSE 80 22122

ENTRYPOINT ["/bin/bash","/start.sh"]


参考

fastdfs安装指南
alpinelinux官网网站
Alpine Linux package management
全部文件地址

github
---------------------
作者:唯一昵称真难
来源:CSDN
原文:https://blog.csdn.net/qq_26440803/article/details/83066132
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/yipianchuyun/p/10726693.html