背景:

新入职的公司有个非常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秒不止。

2. 容器内项目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 即可。

ps2: 已经run起来的容器,若是想解决此问题,需要自行百度下容器运行的配置文件,改一下-v的路径参数即可。

使用docker-sync解决docker for mac 启动的虚拟容器程序运行缓慢的问题的更多相关文章

  1. 【docker】解决docker pull镜像 拉取镜像龟速的问题,docker拉取镜像使用阿里云docker镜像加速器

    在docker拉取mysql镜像过程中,出现龟速的问题,解决这个问题的方法: 这个页面 停留了好久好久,依旧没有下载完成. 碰上这种情况 1.先退出Ctrl+C 2.在浏览器上进入阿里云docker库 ...

  2. 如何解决weblogic server启动中在IIOP后运行缓慢

    WebLogic Server在Linux环境中,有时因为linux OS的安全包没有安装,导致weblogic server 在启动的时候会在长时间的停留在 <2/07/2009 08:54: ...

  3. Codeblock解决注释乱码问题及在ubuntu中程序运行时乱码问题。

    (1)修改源文件保存编码在:settings->Editor->gernal settings>other settings 看到左边的Encoding group Box,改为WI ...

  4. c# 限制同时启动多个实例程序运行

    using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using S ...

  5. Docker教程:docker的概念及安装

    http://blog.csdn.net/pipisorry/article/details/50754385 Why docker 对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规 ...

  6. 温故知新Docker概念及Docker Desktop For Windows v3.1.0安装

    Docker 简介 什么是Docker? Docker是一个开放源代码软件项目,项目主要代码在2013年开源于GitHub.它是云服务技术上的一次创新,让应用程序布署在软件容器下的工作可以自动化进行, ...

  7. 在 Docker 容器中运行应用程序

    案例说明 运行 3 个容器,实现对网站的监控. 三个容器的说明: 容器 web: 创建自 nginx 映像,使用 80 端口,运行于后台,实现 web 服务. 容器 mailer: 该容器中运行一个 ...

  8. Docker(一):Docker入门教程

    如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...

  9. 把AspDotNetCoreMvc程序运行在Docker上-part2:修改容器以及发布镜像

    在上一个part<把AspDotNetCoreMvc程序运行在Docker上-part1>,已经将成功将aspdotnetcore程序运行在两个不同的容器中,目前两个容器的内容完全相同,只 ...

随机推荐

  1. Windows驱动开发-_DRIVER_OBJECT结构体

    每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候,被内核中的对象管理程序所创建的,内核对一个驱动只加载一个实例,是由内核中的I/O管理器负责加载的,驱动程序需要在Driver ...

  2. c语言查漏补缺

    getchar:执行getchar()函数时,首先从输入缓存区读取字符,直到输入缓存区为空时才等待从键盘继续输入.scanf()之间不要有printf操作. 逗号表达式 a= (++a,1,2),只取 ...

  3. 15.Pythonic与python杂记

    switcher ={ :'sunday', :'monday', :'thuesday' } day = day_name=switcher.get(day,'Unknow') print(day_ ...

  4. IIC协议解析

    (1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距 ...

  5. Golang的运算符-赋值运算符

    Golang的运算符-赋值运算符 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.赋值运算符概述 常见的赋值运算符: =: 表示赋值运算符,如"a = 100" ...

  6. 【pwnable.kr】cmd1

    最近的pwnable都是linux操作系统层面的. ssh cmd1@pwnable.kr -p2222 (pw:guest) 首先还是下载源代码: #include <stdio.h> ...

  7. C++编程学习(九)this指针&友元函数

    mooc西工大魏英老师的课程通道关闭了,难受.现在边看工程代码边重温刷第一遍C++时候的知识点,顺序没有按照大纲的来,想到哪写到哪. this是干啥用的? 简介:在 C++ 中,每一个对象都能通过 t ...

  8. mvvm双向绑定机制的原理和代码实现

    mvvm框架的双向绑定,即当对象改变时,自动改变相关的dom元素的值,反之,当dom元素改变时,能自动更新对象的值,当然dom元素一般是指可输出的input元素. 1. 首先实现单向绑定,在指定对象的 ...

  9. 解决Java POI 导出Excel时文件名中文乱码,兼容浏览器

    String agent = request.getHeader("USER-AGENT").toLowerCase(); response.setContentType(&quo ...

  10. 吴裕雄--天生自然C++语言学习笔记:C++ 引用

    引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量 C++ 引用 vs 指针 引用很容易与指针混淆,它们之间有三个主要的 ...