Docker 安装FastDFS集群

拉取镜像

docker pull morunchang/fastdfs

目录结构

 - /data
   - /fastdfs
     - /fdfs_tr
       - Dockerfile
       - client.conf
       - nginx.conf
       - tracker.sh
     - /fdfs_st1
       - Dockerfile
       - nginx.conf
     - /fdfs_st2
       - Dockerfile
       - nginx.conf

安装Tracker

创建文件:Dockerfile

FROM morunchang/fastdfs
COPY nginx.conf /etc/nginx/conf/nginx.conf
COPY tracker.sh /tracker.sh
ENTRYPOINT sh tracker.sh

创建文件:client.conf

# connect timeout in seconds
# default value is 30s
connect_timeout=30

# network timeout in seconds
# default value is 30s
network_timeout=60

# the base path to store log files
base_path=/data/fast_data

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.4.30:22122

#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info

# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false

# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600

# if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false

# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false

# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf


#HTTP settings
http.tracker_server_port=8080

#use "#include" directive to include HTTP other settiongs
##include http.conf

创建文件:nginx.conf

#user  nobody;
worker_processes  5;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

worker_rlimit_nofile 8192;

events {
    worker_connections  4096;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    upstream fdfs_group1 {
         server 192.168.4.30:8081 weight=1 max_fails=2 fail_timeout=30s;
    }

    upstream fdfs_group2 {
         server 192.168.4.29:8081 weight=1 max_fails=2 fail_timeout=30s;
    }

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /group1/M00 {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_pass http://fdfs_group1;
            expires 30d;
        }

        location /group2/M00 {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_pass http://fdfs_group2;
            expires 30d;
        }
    }
}

创建文件:tracker.sh

#!/bin/sh
/data/fastdfs/tracker/fdfs_trackerd /etc/fdfs/tracker.conf
/etc/nginx/sbin/nginx
tail -f /data/fast_data/logs/trackerd.log

构建Tracker容器

docker build -t fdfs_tracker:1.0.0 .
docker run -dit --net=host -v /data/fastdfs/fdfs_tr/fast_data:/data/fast_data -v /data/fastdfs/fdfs_tr/client.conf:/etc/fdfs/client.conf --name fdfs_tr fdfs_tracker:1.0.0

安装Storage

创建文件:Dockerfile

FROM morunchang/fastdfs
COPY nginx.conf /etc/nginx/conf/nginx.conf
ENTRYPOINT sh storage.sh

创建文件:nginx.conf

worker_processes  5;

worker_rlimit_nofile 8192;

events {
    worker_connections  4096;
}
 
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8081;
        server_name  localhost;
 
	location ~/group([0-9])/M00 {
	    root /data/fast_data/data;
	    ngx_fastdfs_module;
	}
    }
}

构建Storage容器

docker build -t fdfs_storage:1.0.0 .
# 集群1
docker run -dit --net=host --restart=always -v /data/fastdfs/fdfs_st1/fast_data:/data/fast_data -e GROUP_NAME=group1 -e TRACKER_IP=192.168.4.30:22122 --name fdfs_st1 fdfs_storage:1.0.0
# 集群2
docker run -dit --net=host --restart=always -v /data/fastdfs/fdfs_st2/fast_data:/data/fast_data -e GROUP_NAME=group2 -e TRACKER_IP=192.168.4.30:22122 --name fdfs_st2 fdfs_storage:1.0.1

验证

查看Tracker注册情况

docker exec -it fdfs_tr fdfs_monitor /etc/fdfs/client.conf

测试上传

docker exec -it fdfs_tr bash
echo "aaa" >> test1.txt && echo "bbb" >> test2.txt && echo "ccc" >> test3.txt

# 测试
/usr/bin/fdfs_test /etc/fdfs/client.conf upload test1.txt
/usr/bin/fdfs_test /etc/fdfs/client.conf upload test2.txt
/usr/bin/fdfs_test /etc/fdfs/client.conf upload test3.txt

目录[+]

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息