使用Docker来启动WordPress的开发环境太慢的问题以及相应对策
TL;DR的中文释义是“太长不看”,简单描述就是概括某一段文字或内容并表示不愿意花太多时间去阅读。
-
- Docker for mac でローカルのボリュームをマウントすると非常に動作が遅い
-
- 解決策として、頻繁に更新されるものだけをボリュームとしてマウントし、それ以外はDockerイメージ内に入れてしまう
-
- 副作用としては、上記でマウントしたボリューム外のファイルを更新するのがすこしだけ厄介
ただし、それは別途マウントすればいいだけなので、そこまで大きな問題ではない
发展过程
由于不想将WordPress的开发环境(PHP、MySQL)安装在主机操作系统的底层,并且希望将代码以Git仓库的形式保存,因此我使用Docker来进行开发。以前我使用的是https://phpdocker.io/的docker-compose.yml和Dockerfile等组件。
然而,由于PHP脚本文件的读取处理与Docker for Mac的volumes挂载主机操作系统目录的机制不兼容,我一直困扰着。但最终找到了解决方法。
也许使用缓存可能解决了Docker for mac的卷速度慢的问题,但是这篇文章通过另一种方法解决了这个问题。你可以参考一下这篇文章:https://blog.hanhans.net/2017/05/23/docker-for-mac-slow/。
方法和实际代码
根据我在TL;DR中写的,如果只将经常更新的文件作为卷挂载,其他内容放入Docker镜像中,速度就不会变慢。在我开发的项目中,WordPress的核心代码也放在Git仓库下(注意,wp-config.php等文件与生产服务器中的不同),即使是只对主题稍作修改的项目,也应该可以使用这种方法来管理。
version: "3.1"
services:
wordpress:
build: .
volumes:
# theme以下はbuild時だけでなく更新かけたいのでVOLUMEで入れてる
- ./wordpress/wp-content/themes/mytheme:/var/www/html/wp-content/themes/mytheme
- ./wordpress/wp-content/uploads:/var/www/html/wp-content/uploads
ports:
- "80:80"
depends_on:
- mysql
mysql:
image: mysql:5.7
volumes:
- mysql:/var/lib/mysql
- ./mysql-initdb.d:/docker-entrypoint-initdb.d
# Set max_allowed_packet to 256M (=32505856)
command: --max_allowed_packet=32505856
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: ''
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
mysql:
# Dockerfile
FROM wordpress:php7.2-apache
# 基本的には手元のwordpressを入れなおす
ADD ./wordpress /var/www/html
# 注意: .dockerignore の存在を忘れないこと。
# .dockerignore
wordpress/wp-content/uploads
wordpress/wp-content/themes/mytheme
最后
这种情况下,本地确认太慢了,实际上每次直接发送到分级服务器更快,这使得开发环境变得微妙。很高兴改善了这种情况。
我平常不太会写PHP,由于各种限制,只好接触WordPress。我觉得有很多人都是这样,而且这些人希望将环境封装到Docker容器中。
我认为即使在使用Laravel或其他使用PHP的项目上,也可以同样使用它。尤其是只需将vendor文件夹放入项目中,速度方面肯定会有很大的优势。