Masayan tech blog.

  1. ブログ記事一覧>
  2. Dockerのマウントの種類を理解して、フロントエンド開発を高速化する

Dockerのマウントの種類を理解して、フロントエンド開発を高速化する

公開日

環境

  • 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)の実行速度が大幅に改善できます。

  1. bind mounts
    Dockerにおけるマウントとしておそらく一番身近なのはおそらくこちら
  2. Volumes
  3. 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について紹介しています。