使用 docker-sync 解决 docker for Mac 启动的虚拟容器程序运行缓慢的问题

背景:

新入职的公司有个非常OG的大项目,为了避免新同学重复造轮子,有哥们已经把项目需要的所有打好了一个镜像供我们启动docker。

初次启动docker 使用的命令如下:

docker run -itd -p 80:80 -v /web/docker:/web/docker  centos

(ps: docker run 相关-i -p -v 等的含义不再此处赘述)

可见启动容器时,使用了docker自带的 -v (-volume) 方式进行mac本地和docker容器内的路径映射。

问题:
1.容器启动正常,环境正常,但是项目的运行非常慢,别人mac本地搭建的环境运行一个页面1-2秒,容器内跑,直接15-20秒不止。

  1. 容器内项目git status 也巨慢 十几秒有余。

十分影响开发效率,初期在项目入口直接die('111'); 之后 发现响应很快,基本排除了nginx - php之间交互的问题。又顺带百度google了一通,最终定位到,mac本地的文件系统和docker容器内的文件系统(osxfs)不一致,需要频繁的进行文件格式转换。

解决:

使用docker-sync以挂载容器的形式进行路径映射。 docker-sync详细介绍可自行google百度,本文只记录下使用方式。

安装:

gem install docker-sync

brew install fswatch

brew install unison

brew install eugenmayer/dockersync/unox

(ps 没权限时请自行sudo)

使用:

cd  /web/docker/xxx    #  项目根路径
vim docker-sync.yml    #  docker-sync 配置文件

内容如下:

version: '2'    
syncs:
    xxx-sync:   #ps: 生成的挂载容器的name,一般是开发容器-sync
        sync_strategy: 'unison'
        src: '.'

继续执行启动命令

docker-sync start     # 启动    此时已经生成了一个xxx-sync 名称的文件容器 , 可自行docker ps 查看。

接下来本地任何修改,可 xxx-sync 容器内的文件已经自行同步。

这时候启动容器

docker run -itd -p 80:80 -v xxx-sync:/web/docker  centos

新容器的文件同步耗时问题已经基本解决。
ps1: 电脑重启或者偶发性双向同步有问题时,去本地项目根目录 执行一次docker-sync clean 以及 docker-sync start 即可(电脑重启时,直接docker-sync start)。
ps2: 已经run起来的容器,若是想解决此问题,需要自行百度下容器运行的配置文件,改一下-v的路径参数即可。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!