環境
- windows10
- DockerDesktop for Win 3.5.x
- Laravel 8.x
- PHP 8.x
- node v14.17.4
- npm 6.14.14
- VsCode
- gitbash 2.32.0.1
本題
Dockerにおける、マウントの種類は大きく3種類あります。
このうち、Volumesを使用してnode_modulesフォルダをDockerコンテナ側のみの管理下に置いてあげることで、npmコマンド(npm installやrun dev)の実行速度が大幅に改善できます。
- bind mounts
Dockerにおけるマウントとしておそらく一番身近なのはおそらくこちら - Volumes
- tmpfs mounts
bind mounts
- ホストマシン上のファイルやディレクトリはコンテナにマウントされます(どのようにマウントするかはymlファイルに記載)
Volumes
- Docker(Linuxだと/var /lib/docker/volumes/)によって管理されるファイルシステムの一部に保存されます。
- Volumesで指定したディレクトリ・ファイルはDockerによって管理され、ホストマシンから分離されます
tmpfs mounts
- ホスト側のメモリにのみ保存され、ファイルシステムには書き込まれません。
- 主に、セキュリティ上の理由もしくは大量の非永続化データを書き込む必要がある場合にコンテナのパフォーマンスを保護するために用いられます。
- コンテナ削除と同時にデータはクリアされる。一時的なキャッシュファイルなどが対象
設定例
bind mounts
- volumesの箇所に、ホスト側のパス:dockerコンテナ側のパスという形式でマウントするフォルダを指定する
docker-compose.yml
version: "3.8"
services:
app:
container_name: app
build: ./docker/php
volumes:
- ./:/var/www
// 割愛
Volumes
- node_modules_volumeとして、Docker(Linuxだと/var /lib/docker/volumes/)側のファイルシステムで管理できるように設定する
- 通常のバインドマウントの後にnode_modulesだけvolumeマウントにすることで、node_modulesをバインドマウントの適用外とすることができる。これにより、ビルド等を高速化することができる
docker-compose.yml
version: "3.8"
services:
app:
container_name: app
build: ./docker/php
volumes:
- ./:/var/www
- node_modules_volume:/var/www/my-app/node_modules
// 割愛
volumes:
node_modules_volume:
tmpfs mounts
- tmpfs:の箇所にマウントしたいディレクトリを記述することで、この場所で生成されたファイル等をDockerホストのメモリ上で管理することができる
docker-compose.yml
ubuntu:
image: ubuntu
tmpfs:
- /var/cache
以上です。
まとめ
いかがでしたでしょうか。本記事では、Dockerのマウントの種類を理解して、フロントエンド開発を高速化するためのTipsについて紹介しています。