Copy & Paste Engineer

【Docker】volume をマウントする時に特定の一部ディレクトリを除外する

【Docker】volume をマウントする時に一部ディレクトリを除外する

Docker+PHP 環境が遅かったので vendor フォルダを同期しないように volume をマウントする時に一部ディレクトリを除外して対応したメモ。

この対応で速度が2倍ほどになりました。 vendor 内のファイル数が多いほど効果は高そうです。

Dokcer PHP の環境が遅い原因

Dockerはホストとコンテナ間でファイル同期の処理が行われるため、同期対象のファイルが多ければ多いほど遅くなる。

対処方法

対象方法は大量にファイルが置かれている vendor を同期しないように致しました。

ボリュームを使用する

ホストのからマウントをしないで volume を使う。

version: '3'

services:
  php:
    image: php:8.1-apache
    volumes:
      - ./src:/var/www/html
      # volume mount
      - vendor-valume:/var/www/html/vendor # vendorをvolumeにマウント
    ports:
      - 80:80

# volumes
volumes:
  vendor-valume: # vendor用のvolume

特定ディレクトリをマウントしない

共有するソースのうち一部を共有しないように設定する。

version: '3'

services:
  php:
    image: php:8.1-apache
    volumes:
      - ./src:/var/www/html
      # exclude directory
      - /var/www/html/vendor # 除外するディレクトリ
    ports:
      - 80:80

# volumes
volumes:
  vendor-valume: # vendor用のvolume

参考

【検証】React.FC と React.VFC はべつに使わなくていい説 – KRAY Inc