首页 > 编程语言 >解决PHP项目在Docker(WSL2)中运行缓慢的问题(转)

解决PHP项目在Docker(WSL2)中运行缓慢的问题(转)

时间:2023-12-29 10:00:14浏览次数:23  
标签:Windows Ubuntu ubuntu Docker PHP WSL2 docker

原文:https://blog.csdn.net/ljfrocky/article/details/129807308

1、环境

  • Windows 11
  • Docker Desktop 4.17.1(开启WSL2)
  • WSL2(Ubuntu-22.04)

2、前言

最近在使用Docker容器运行PHP项目的时候,发现特别缓慢。例如一个干净的 ThinkPHP 5.1 框架,访问首页都需要1秒以上,如果再加上数据库查询、复杂的业务逻辑等代码的话,那速度可想而知。

我的开发模式是,在Windows上使用 IDE 开发,代码也是存储在Windows系统上,然后docker通过挂载的方式,将代码目录挂载到容器里去运行。

后面查资料得知,是因为Docker是跑在 WSL2 里的,虽说 WSL2 相比 WSL1 更先进,但在跨系统文件读写性能方面是比 WSL1 差的(参阅:比较 WSL 1 和 WSL 2),因此,跑在 WSL2 里的docker想要跨系统访问Windows系统上的代码文件的话,性能是很差的。

3、解决

3.1、使用WSL1

让docker不要使用WSL2,改为使用WSL1。方法很简单,在设置里面关闭 WSL2 就可以:

在这里插入图片描述
但正如图中描述所说,Windows Home版本只能使用 WSL2,不支持WSL1,我的正好是Home版本,因此这种方法行不通。

3.2、使用WSL2

既然问题起因是跨系统文件读写性能差,那么我们不要跨系统读写不就可以了?

所以我不再把代码存储在Windows系统上,改为存储在 WSL2 上。

1)首先要安装一个WSL系统,我选择的是Ubuntu 22.04,在Microsoft Store中搜索Ubuntu安装就可以:

因为我已经安装好了,所以图片中显示的是“已拥有”。

2)在Docker Desktop中开启WSL集成功能,并重启Docker:

开启WSL集成功能后,我们就可以在Ubuntu里使用docker命令了。

3)进入Ubuntu shell命令行界面,如下图所示,搜索ubuntu,点击就可以:

或者在Powershell中执行 wsl -d Ubuntu-22.04命令也可以。

4)进入ubuntu命令行界面后,发现执行docker命令会报错:

这是因为当前用户没有足够的权限,解决方法是,在前面加上sudo,即sudo docker ps就可以。

但我不想每次都加sudo,太麻烦了。还有另外一种方法,执行sudo usermod -aG docker ${USER}命令将当前用户加入到docker用户组就可以不用加sudo了。

注意:加入到docker用户组后,要关闭当前窗口,重新进入ubuntu命令行才会生效!

5)在ubuntu中选一个路径作为你项目的存储目录,我选的是 /home/workspace 目录,因为我的项目有上传到git仓库,因此我使用 git clone 命令将代码下载到 /home/workspace 目录即可。

6)在ubuntu中启动docker容器,将代码目录挂载到docker容器里去,命令参考:

docker run -d -v /home/workspace:/var/www/html --name {CONTAINER_NAME} {IMAGE_NAME}

/home/workspace是宿主机路径,/var/www/html是容器路径,{CONTAINER_NAME}是容器名字,{IMAGE_NAME}是镜像名字,需自行替换。

7)现在我的代码都存储在ubuntu里了,那在Windows上我还怎么用IDE进行开发?

不用急,在Windows上我们也是可以访问ubuntu里的文件的。

例如下图,在IDE里打开项目的时候,选择\wsl$\Ubuntu-22.04\,这个文件夹里的就是ubuntu系统里的文件目录,然后选择你代码所在的文件夹打开就可以了:

8)将代码改为存储在ubuntu里后,再次运行项目,速度已经恢复正常~

标签:Windows,Ubuntu,ubuntu,Docker,PHP,WSL2,docker
From: https://www.cnblogs.com/pine007/p/17934115.html

相关文章

  • dockerfile多阶段构建最小镜像
    如何将Go项目与Docker结合实现高效部署原创 云原生Go 源自开发者 2023-12-2907:00 发表于广东 听全文源自开发者专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。56篇原创内容公众号在现代软件开发......
  • 更新所有docker
    解析这个命令:dockerimages|grep-vREPOSITORY|awk'BEGIN{OFS=":"}{print$1,$2}'|xargs-L1dockerpull这个命令的作用是从Docker镜像仓库中拉取所有的镜像。具体的步骤如下:dockerimages:列出所有的Docker镜像。grep-vREPOSITORY:过滤掉包含"REPOSITORY"的行,即过......
  • 北京php软件开发公司有哪些
    在北京,有许多知名的PHP软件开发公司,以下是一些比较知名的公司:华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在开发、建设到运营推广领域拥有丰富经验,在教育,医疗,APP,管理,商城,人工智能,ERP,系统二次开......
  • PHP实现视频文件上传完整实例
    本文以一个完整实例的形式实现了视频文件上传的功能。虽然是比较基础的应用,仍有一定的参考价值。分享给大家供大家参考之用。具体方法如下:首先,对PHP来说视频也属于文件,我们利用这个道理,可以通过与上传普通文件类似的方式实现上传PHP视频文件。不同的是视频文件一般较大,上传时间长......
  • Docker安装Oracle11g
    1、拉取Oracle镜像,并查看dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11gdockerimages2、创建临时容器dockerrun-d-p1521:1521--nameoracle11gregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g3、进入容器#先查看所有容器,找到Oracle容......
  • Docker实现原理学习
    Docker实现原理学习Namespaces命名空间(namespaces)是Linux为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。在日常使用Linux或者macOS时,我们并没有运行多个完全分离的服务器的需要,但是如果我们在服务器上启动了多个服务,这些服务其实会相互......
  • 10款基于PHP的免费CMS推荐
    总结的10款基于PHP的免费CMS,想要通过PHP+MYSQL搭建网站的朋友可以从中参考。要查看详细介绍可以看BBon的原文,这里只是简单侃一下。Joomla!Joomla!的前身是Mambo的开源码计划,Drupal直逼Joomla!的开源CMS,不过貌似用户群还是没有Joomla!多。Mambo企业类CMS网站可以选择,个......
  • PHP内存占用优化
    请求次数:1300次执行时间:200*60=12000S//要分批保存数据,可以将`$all_data`数组拆分成多个小数组,并逐一调用`saveAll`方法。以下是一个示例,演示如何将数据分批为每批100条进行保存:$dataModel=newcxVipUserStudyInfo();$batchSize=100;$offset=0;foreach($jsonD......
  • PHP查询内存占用函数
    PHP查询内存占用函数memory_get_usage()在PHP中,包括ThinkPHP框架中,直接查询一个数组占用的内存大小可以使用memory_get_usage()函数。这个函数返回当前PHP脚本消耗的内存总量(以字节为单位)。以下是一个简单的示例,展示如何在ThinkPHP中获取一个数组占用的内存大小://在ThinkPHP......
  • docker ps 语法
    dockerps语法  语法:dockerps[OPTIONS]  参数: 参数名参数描述–all,-a显示所有的容器,包括未运行的–filter,-f根据条件过滤显示的内容–format:指定返回值的模板文件–last,-l显示最近创建的容器–latest,-n列出......