一、docker部署fastdfs
fastdfs 的Dockerfile
FROM centos:7
LABEL maintainer "luhuiguo@gmail.com"
ENV FASTDFS_PATH=/opt/fdfs \
FASTDFS_BASE_PATH=/var/fdfs \
PORT= \
GROUP_NAME= \
TRACKER_SERVER=
#get all the dependences
RUN yum install -y git gcc make
#create the dirs to store the files downloaded from internet
RUN mkdir -p ${FASTDFS_PATH}/libfastcommon \
&& mkdir -p ${FASTDFS_PATH}/fastdfs \
&& mkdir ${FASTDFS_BASE_PATH}
#compile the libfastcommon
WORKDIR ${FASTDFS_PATH}/libfastcommon
RUN git clone --branch V1.0.36 --depth 1 https://github.com/happyfish100/libfastcommon.git ${FASTDFS_PATH}/libfastcommon \
&& ./make.sh \
&& ./make.sh install \
&& rm -rf ${FASTDFS_PATH}/libfastcommon
#compile the fastdfs
WORKDIR ${FASTDFS_PATH}/fastdfs
RUN git clone --branch V5.11 --depth 1 https://github.com/happyfish100/fastdfs.git ${FASTDFS_PATH}/fastdfs \
&& ./make.sh \
&& ./make.sh install \
&& rm -rf ${FASTDFS_PATH}/fastdfs
EXPOSE 22122 23000 8080 8888
VOLUME ["$FASTDFS_BASE_PATH", "/etc/fdfs"]
COPY conf/*.* /etc/fdfs/
COPY start.sh /usr/bin/
#make the start.sh executable
RUN chmod 777 /usr/bin/start.sh
ENTRYPOINT ["/usr/bin/start.sh"]
CMD ["tracker"]
1、创建docker-compose.yml
version: '3.0'
services:
tracker:
container_name: tracker
image: luhuiguo/fastdfs
command: tracker # 覆盖容器启动后默认执行的命令, 支持 shell 格式和 [] 格式
network_mode: host # 指定网络模式 (等同于 docker run --net 的作用, 在使用 swarm 部署时将忽略该选项)
#volumes: # 不要映射出来,要不每次重启tracker都要清数据文件
#- /var/fdfs/tracker:/var/fdfs
storage0:
container_name: storage0
image: luhuiguo/fastdfs
command: storage
network_mode: host
environment: # 设置环境变量, environment 的值可以覆盖 env_file 的值 (等同于 docker run --env 的作用)
- TRACKER_SERVER=192.168.180.35:22122
- GROUP_NAME=group1
volumes:
- /var/fdfs/storage0:/var/fdfs
-
storage4:
container_name: storage4
image: luhuiguo/fastdfs
command: storage
network_mode: host
environment:
- TRACKER_SERVER=192.168.180.35:22122
- GROUP_NAME=group2
- PORT=22222
volumes:
- /home/data/fastdfs/storage4:/var/fdfs
注:docker exec -it tracker sed -i ‘s/192.168.0.197/192.168.180.35/g’ /etc/fdfs/client.conf #不用运行这个语句
2、查看配置
docker exec -it tracker fdfs_monitor /etc/fdfs/client.conf
3、验证
先进入docker容器
root@localhost:/# echo hello>a.txt
/root@localhost:/# /usr/bin/fdfs_test /etc/fdfs/client.conf upload a.txt
This is FastDFS client test program v5.11
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/
for more detail.
[2019-11-13 09:16:54] DEBUG - base_path=/var/fdfs, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
tracker_query_storage_store_list_without_group:
server 1. group_name=, ip_addr=192.168.180.46, port=23000
group_name=group1, ip_addr=192.168.180.46, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKi0Ll3LygaACOgwAAAABncc3SA568.txt
source ip address: 192.168.180.46
file timestamp=2019-11-13 09:16:54
file size=6
file crc32=1998380320
example file url: http://192.168.180.46/group1/M00/00/00/wKi0Ll3LygaACOgwAAAABncc3SA568.txt
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKi0Ll3LygaACOgwAAAABncc3SA568_big.txt
source ip address: 192.168.180.46
file timestamp=2019-11-13 09:16:54
file size=6
file crc32=1998380320
example file url: http://192.168.180.46/group1/M00/00/00/wKi0Ll3LygaACOgwAAAABncc3SA568_big.txt
查看本地文件的位置
http://192.168.180.46/group1/M00/00/00/wKi0Ll3bji6AKxJiAAAABncc3SA697_big.txt
[root@localhost ~]# cd /var/fdfs/storage0/data/00/00/wKi0Ll3bji6AKxJiAAAABncc3SA697_big.txt
启动:
sudo service fdfs_trackerd start
sudo service fdfs_storaged start
重启:
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
终止:
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
二、kubernetes部署fastdfs
fastdfs-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tracker-deploy
namespace: paas-basic
labels:
name: tracker-deploy
spec:
replicas: 1
template:
metadata:
labels:
app: tracker
spec:
nodeSelector:
tracker: "true"
terminationGracePeriodSeconds: 0
containers:
- name: tracker
image: sinoeyes.io/library/fastdfs:1.0
imagePullPolicy: Always
ports:
- containerPort: 22122
- containerPort: 23000
- containerPort: 8080
- containerPort: 8888
volumeMounts:
- name: tracker-volume
mountPath: /var/fdfs
command: ["/usr/bin/start.sh","tracker"]
volumes:
- name: tracker-volume
hostPath:
path: /home/data/fastdfs/tracker
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: storage0-deploy
namespace: paas-basic
labels:
name: storage0-deploy
spec:
replicas: 1
template:
metadata:
labels:
app: storage0
spec:
nodeSelector:
storage: "true"
terminationGracePeriodSeconds: 0
containers:
- name: storage0
image: sinoeyes.io/library/fastdfs:1.0
imagePullPolicy: Always
ports:
- containerPort: 22122
- containerPort: 23000
- containerPort: 8080
- containerPort: 8888
volumeMounts:
- name: storage0-volume
mountPath: /var/fdfs
env:
- name: TRACKER_SERVER
value: 10.110.110.110:22122
command: ["/usr/bin/start.sh","storage"]
# 默认group1
#- name: GROUP_NAME
# value: "group1"
volumes:
- name: storage0-volume
hostPath:
path: /home/data/fastdfs/storage0
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: storage1-deploy
namespace: paas-basic
labels:
name: storage1-deploy
spec:
replicas: 1
template:
metadata:
labels:
app: storage1
spec:
nodeSelector:
storage: "storage1"
terminationGracePeriodSeconds: 0
containers:
- name: storage1
image: sinoeyes.io/library/fastdfs:1.0
imagePullPolicy: Always
ports:
- containerPort: 22122
- containerPort: 23000
- containerPort: 8080
- containerPort: 8888
volumeMounts:
- name: storage1-volume
mountPath: /var/fdfs
env:
- name: TRACKER_SERVER
value: tracker.paas-basic:22122
#value: 10.110.110.110:22122
- name: GROUP_NAME
value: "group2"
command: ["/usr/bin/start.sh","storage"]
volumes:
- name: storage1-volume
hostPath:
path: /home/data/fastdfs/storage1
fastdfs-service.yaml
apiVersion: v1
kind: Service
metadata:
name: tracker
labels:
app: tracker
namespace: paas-basic
spec:
selector:
app: tracker
type: NodePort
clusterIP: 10.110.110.110
ports:
- name: "22122"
port: 22122
targetPort: 22122
protocol: TCP
- name: "23000"
port: 23000
targetPort: 23000
protocol: TCP
- name: "8080"
port: 8080
targetPort: 8080
protocol: TCP
- name: "8888"
port: 8888
targetPort: 8888
protocol: TCP
注意:
1、nodeSelector根据 label
指定pod起在哪台机器上,根据自身所需进行修改
2、注意集群中不同node网络是否相通
storage.conf配置文件
tracker.conf配置文件
luhuiguo/fastdfs镜像参考
season/fastdfs镜像参考
其他参考1