Dockerが遅すぎます……
WordPress+docker-composeで開発環境を構築していますが、ページを更新するだけで30秒くらいかかります。
初めは私のPCが弱すぎるだけかと思いましたが、検索してみると同じような方が結構出てきました。
なぜDockerが遅くなるのか
例えば、以下のようにdocker-composeファイルのvolumesで同期処理を設定しているとします。
とあるブログ記事を参考に私が真似した設定です。
version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "3000:80"
depends_on:
- mysql
env_file: .env
volumes:
- ./public:/var/www/html/
mysql:
image: mysql:5.7
env_file: .env
ports:
- "3306:3306"
これだと、更新するたびwordpressフォルダpublic以下全体とdocker側の/var/www/html
が毎回同期処理を行ってしまいます。
これがDockerを遅くしてしまう原因です。
wordpressフォルダ全体だとかなりのファイル数になりますので、これを最小限に減らせばいいということですね。
volumesの設定で同期を管理する
そこで変更したのがこちら。
version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "3000:80"
depends_on:
- mysql
env_file: .env
volumes:
- wp_data:/var/www/html/
- ./public/wp-content/themes/mytheme:/var/www/html/wp-content/themes/mytheme/
mysql:
image: mysql:5.7
env_file: .env
ports:
- "3306:3306"
volumes:
wp_data:
テーマフォルダのみ同期することを前提にした設定です。
mythemeをお使いのテーマフォルダ名に変更してください。
プラグイン開発などする場合は適宜パスを変更すればOKですね。
一番下でwp_data
というvolumes
を作り、/var/www/html/
を突っ込んでおきます。
テーマフォルダ内しか同期しませんので、それより上の階層の変更は見なくなりますので注意です。
私の場合、これだけで即時ページ更新されるくらいに早くなりました。
.wslconfigでWSL2使用メモリ容量の調整
さらに早くしたい場合には.wslconfig
の中身を以下のように書き換えると良いそうです。
.wslconfig
はエクスプローラーのアドレスバーに%UserProfile%
と入力して表示されたフォルダ内に作ります。
# Settings apply across all Linux distros running on WSL 2
[wsl2]
# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB
# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=8GB
Advanced settings configuration in WSL
何をしているかというと、WSL2を使用するためのメモリ容量を増やしているわけですね。
初期値は2Gに設定されているようなので、ご利用のPCメモリ容量と相談しながら、4G、8Gと上げてみてください。
swapはメモリがパンパンになったときにストレージと置き換えるために確保する容量です。