分类: Docker 发表时间: 2019年10月23日

标题: 解决MacOSX下Docker挂载目录文件IO操作速度慢的问题

摘要: 在macOSX系统下,Docker desktop是通过虚拟机运行docker服务的,这样在将本地目录挂载到docker容器上进行文件读写时效率就会非常低下,使用浏览器访问本地站点时打开就会特别慢,本文记录一下通过docker-bg-sync容器来代理io操作的过程

docker-bg-sync

Docker-bg-sync是github上的一个项目,它本身是一个docker的容器镜像,该镜像通过unison工具将本地文件同步到目标容器上,从而使目标容器的文件读写发生在本地,避免io的影响

docker-compose配置示例

  1. version: "3.7"
  2. networks:
  3. compose-network:
  4. volumes:
  5. bg-sync-volume:
  6. services:
  7. nginx:
  8. image: nginx:1.17
  9. depends_on:
  10. - php
  11. volumes:
  12. - /etc/nginx/conf.d:/etc/nginx/conf.d
  13. - /var/www:/var/www
  14. ports:
  15. - 80:80
  16. networks:
  17. - compose-network
  18. php:
  19. image: php:7.3-fpm
  20. depends_on:
  21. - redis
  22. - mysql
  23. volumes:
  24. - bg-sync-volume:/var/www
  25. ports:
  26. - 9000:9000
  27. networks:
  28. - compose-network
  29. redis:
  30. image: redis
  31. command: redis-server
  32. volumes:
  33. - /var/data/redis/node-1:/data
  34. ports:
  35. - 6379:6379
  36. networks:
  37. - compose-network
  38. mysql:
  39. image: mysql:5.7
  40. volumes:
  41. - /var/data/mysql/node-mysql-57:/var/lib/mysql
  42. ports:
  43. - 3306:3306
  44. networks:
  45. - compose-network
  46. environment:
  47. MYSQL_ROOT_PASSWORD: 123456
  48. bg-sync:
  49. image: cweagans/bg-sync
  50. volumes:
  51. - /var/www:/source
  52. - bg-sync-volume:/var/www
  53. networks:
  54. - compose-network
  55. environment:
  56. - SYNC_DESTINATION=/var/www
  57. - SYNC_MAX_INOTIFY_WATCHES=40000
  58. - SYNC_NODELETE_SOURCE=0
  59. privileged: true

在上面的示例中,我们将本地的/var/www目录挂载到bg-sync的/source目录,在bg-sync容器启动后,其会将/source目录中的数据同步到数据卷bg-sync-volume/var/www目录中,同时该目录挂载到目标服务器php的/var/www目录,此时即完成了本地数据到目标容器的同步