运维 使用 docker-sync 让 mac 和 docker 之间的文件同步变快
最近,在mac上面安装了docker,然后让开发环境运行在docker上面
总的来说感觉不错
但是同一个页面,在linux上面的时候需要4秒,在mac for docker上面需要25秒
调查了一下原因
- https://forums.docker.com/t/file-access-in-mounted-volumes-extremely-slow-cpu-bound/8076/158
- 大概是说docker采用的osxfs导致文件的读取比较慢
osxfs的介绍,有兴趣的可以研究下
https://docs.docker.com/docker-for-mac/osxfs/#performance-issues-solutions-and-roadmap
搜索了一下解决办法
1. vagrant -> virtualbox -> linux -> docker
试了下用vagrant安装linux,然后docker跑在linux上面,用nfs来同步
速度确实变快了,但是多安装了一层总感觉有点麻烦
所以调查了一下其他的解决办法
2. docker-sync
在docker-for-mac的网站和github的issue里面有介绍
- https://github.com/docker/for-mac/issues/77
- https://forums.docker.com/t/file-access-in-mounted-volumes-extremely-slow-cpu-bound/8076
试了下感觉不错,总结下如何使用的
1. 在mac上面安装docker-sync
$ gem install docker-sync
$ brew install fswatch
$ brew install unison
$ brew install eugenmayer/dockersync/unox
$ docker-sync start
2. 添加docker-sync.yml文件
version: '2'
syncs:
sync-folder:
src: '.'
sync_strategy: 'unison'
# 同步时的用户ID,不指定的话为root
sync_userid: '1000'
sync_excludes: ['vendor/bundle/', 'node_modules', 'tmp']
具体设置可以看这里
3. 添加docker-compose-dev.yml文件
version: '3'
volumes:
sync-folder:
external: true
services:
app:
volumes:
- sync-folder:/www/sample_project
把mac的当前文件夹和docker服务器里面的/www/sample_project进行同步
4. docker-compose up
$ docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d
然后无论在mac还是在docker里面进行文件修改,都会自动进行同步
有时候不知道什么原因无法同步的时候可以重启docker-sync
$ docker-sync clean
$ docker-sync start
总结
mac for docker的文件同步很慢,目前发现两种解决方法
- vagrant -> virtualbox -> linux -> docker
- docker-sync
个人比较喜欢第二种,有更好的解决办法请回复我