如何使用 docker compose 搭建 fastDFS文件服务器
上篇文章给大家介绍了使用docker compose安装FastDfs文件服务器的实例详解
今天给大家介绍如何使用 docker compose 搭建 fastDFS文件服务器,内容详情如下所示:
平台 :Mac M1
备注:关于 IP Address
关于 docker 的网络模式,上述文中提到了 docker 的 Host 模式
:
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
问题在于:使用宿主机的 IP 和端口的话,配置文件中 IP 填写 localhost
的话按理说能访问到容器,然而事实上却不行。个人理解(如果理解有问题的话烦请指正)的 IP Address
填写方法如下:
启动 tracker
时控制台输出:
192.168.64.2
的网络为:
192.168.65.4
的网络为:
文件目录
├── docker-compose.yaml ├── nginx │ └── nginx.conf ├── storage │ └── data └── tracker │ └── conf │ └── client.conf └── store_path
./docker-compose.yaml
version: "2" services: fastdfs-tracker: hostname: fastdfs-tracker container_name: fastdfs-tracker image: season/fastdfs:1.2 network_mode: "host" command: tracker volumes: - ./tracker/data:/fastdfs/tracker/data - ./tracker/conf:/etc/fdfs fastdfs-storage: hostname: fastdfs-storage container_name: fastdfs-storage image: season/fastdfs:1.2 network_mode: "host" volumes: - ./storage/data:/fastdfs/storage/data - ./store_path:/fastdfs/store_path environment: - TRACKER_SERVER=192.168.64.2:22122 command: storage depends_on: - fastdfs-tracker fastdfs-nginx: hostname: fastdfs-nginx container_name: fastdfs-nginx image: season/fastdfs:1.2 network_mode: "host" volumes: - ./nginx/nginx.conf:/etc/nginx/conf/nginx.conf - ./store_path:/fastdfs/store_path environment: - TRACKER_SERVER=192.168.64.2:22122 command: nginx
./tracker/conf/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=/fastdfs/client # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address # 需要修改此处 ip tracker_server=192.168.64.2: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=80 #use "#include" directive to include HTTP other settiongs ##include http.conf
./nginx/nginx.conf
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } 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 0; keepalive_timeout 65; #gzip on; server { listen 9800; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; # 修改部分 location / { root /fastdfs/store_path/data; ngx_fastdfs_module; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
SpringBoot 集成 fastDFS
添加依赖
<dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.27.2</version> </dependency>
applicaiton.yaml
# 分布式文件系统配置 fdfs: #根据自己的ip进行更改 ip: 192.168.64.2 #socket连接超时时长 soTimeout: 1500 connectTimeout: 600 #支持多个 trackerList: - ${fdfs.ip}:22122 # fastDFS 中的 nginx 的 ip 和 port # IDEA 提示使用 https, # nginx 配置 SSL 请移步: web-server-url: http://${fdfs.ip}:9800/
FastDFSConfig.java
@Configuration // 导入FastDFS-Client组件 @Import(FdfsClientConfig.class) // 解决jmx重复注册bean的问题 @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) public aspect FastDFSConfig { }
FastDFSUtil.java
@Component public class FastDFSUtil { @Resource private FastFileStorageClient fastFileStorageClient; @Resource private FdfsWebServer fdfsWebServer; public String uploadFile(MultipartFile file) throws IOException { StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null); String fullPath = storePath.getFullPath(); getResAccessUrl(fullPath); return fullPath; } public String uploadFile(File file) { try { FileInputStream inputStream = new FileInputStream(file); StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null); return storePath.getFullPath(); } catch (Exception e) { e.printStackTrace(); return null; } } public byte[] downloadFile(String filePath) { StorePath storePath = StorePath.parseFromUrl(filePath); return fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadByteArray()); } public Boolean deleteFile(String filePath) { if (StringUtils.isEmpty(filePath)) { return false; } try { StorePath storePath = StorePath.parseFromUrl(filePath); fastFileStorageClient.deleteFile(storePath.getGroup(), storePath.getPath()); } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 封装文件完整 URL 地址 * * @param path * @return */ public String getResAccessUrl(String path) { return fdfsWebServer.getWebServerUrl() + path; } }
FastDFSController.java
@RestController @RequestMapping("/fast-dfs") public class FastDFSController { /** * @param file * @return * @throws IOException */ @PostMapping("") @Transactional public void uploadFile(MultipartFile file, String cuisineId) throws IOException { String s = fastDfsUtil.uploadFile(file); String resAccessUrl = fastDfsUtil.getResAccessUrl(s); } /** * @param response * @throws IOException */ @GetMapping("") public void downloadFile(String filePath, HttpServletResponse response) throws IOException { byte[] bytes = fastDfsUtil.downloadFile(filePath); String[] split = filePath.split("/"); String fileName = split[split.length - 1]; // 设置强制下载不打开 response.setContentType("application/force-download"); fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); IOUtils.write(bytes, response.getOutputStream()); } /** * 流媒体的方式播放视频,只能从头看到尾,不能手动点击重新看已经看过的内容 * @param filePath * @param response * @throws IOException */ @GetMapping("/play") public void streamMedia(String filePath, HttpServletResponse response) throws IOException { byte[] bytes = fastDfsUtil.downloadFile(filePath); IOUtils.copy(new ByteArrayInputStream(bytes), response.getOutputStream()); response.flushBuffer(); } }
到此这篇关于如何使用 docker compose 搭建 fastDFS文件服务器的文章就介绍到这了,更多相关docker compose 搭建 fastDFS内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
相关文章
浅谈Docker-compose中的depends_on顺序的问题解决
本文主要介绍了浅谈Docker-compose中的depends_on顺序的问题解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-11-03docker 启动elasticsearch镜像,挂载目录后报错的解决
这篇文章主要介绍了docker 启动 elasticsearch镜像,挂载目录后报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-20解决Docker中的error during connect异常情况
这篇文章主要介绍了解决Docker中的error during connect异常情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-22- 这篇文章主要介绍了JS中的compose函数和pipe函数用法,想深入了解Javascript的同学,可以参考下...2021-04-27
- 这篇文章主要介绍了docker部署confluence的完整步骤,这里的镜像并不是小编自己写的是基于他人打包的文中有详细介绍,需要的朋友可以参考下...2021-06-11
- 这篇文章主要介绍了解决docker挂载的目录无法读写问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-19
- 这篇文章主要介绍了docker swarm外部验证负载均衡时不生效的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-27
教你使用Portainer管理多台Docker容器环境的方法
这篇文章主要介绍了Portainer管理多台Docker容器环境,本文给大家介绍的非常详细,包括环境准备及管理docker的详细过程,需要的朋友可以参考下...2021-11-11- 这篇文章主要介绍了docker端口映射及外部无法访问问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-19
Docker 解决openjdk容器里无法使用JDK的jmap等命令问题
这篇文章主要介绍了Docker 解决openjdk容器里无法使用JDK的jmap等命令问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-04使用rpm安装指定版本docker(1.12.6)的详细步骤
为了防止安装高版本的docker引发的错误,需要安装1.12.6版本的docker,下面小编给大家带来了使用rpm安装指定版本的docker(1.12.6)的步骤,感兴趣的朋友一起看看吧...2021-08-11- 通过本文可以帮助大家快速学习Docker安装ElasticSearch的过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-08-31
- 这篇文章主要介绍了一条命令重启所有已停止的docker容器操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-20
- 这篇文章主要介绍了在docker中执行linux shell命令的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-30
- 这篇文章主要给大家介绍了关于docker容器与宿主机的数据交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-09
安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)
这篇文章主要介绍了安装Docker Desktop报错WSL 2 installation is incomplete的问题,解决方法很简单只需我们自己手动更新一下,我们根据提示去微软官网下载最新版的wsl2安装后即可正常打开,需要的朋友可以参考下...2021-06-13详解如何使用Docker部署Django+MySQL8开发环境
这篇文章主要介绍了详解如何使用Docker部署Django+MySQL8开发环境,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-19- 这篇文章主要介绍了Docker部署Rancher的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-06
- 这篇文章主要介绍了.NET 5 部署在docker上运行的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-06
Shell脚本构建Docker 半自动化编译打包发布应用操作
这篇文章主要介绍了Shell脚本构建Docker 半自动化编译打包发布应用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-30