Docker Compose で volumes をマウントする際に一部を除外する

経緯

アプリケーションの開発・検証環境として Docker を利用する際に、アプリケーション本体は volumes としてマウントしたいです。

しかし、ファイル数が多く容量も肥大化しがちなパッケージ達のいる Node.js の node_modules や Composer の vendor は除外したい、というようなケースでどうしようか、という一つの対処方法としてメモ。

対応

version: '3.9'
services:
  web:
    volumes:
      # apache virtual host
      - ./apache/www:/var/www/$WEB_ROOT_DIRECTORY/web

通常であればこのようにドキュメントルート以下を全て volumes としてマウントしますが。

version: '3.9'
volumes:
  dummy:
services:
  web:
    volumes:
      # apache virtual host
      - ./apache/www:/var/www/$WEB_ROOT_DIRECTORY/web
      - dummy:/var/www/$WEB_ROOT_DIRECTORY/web/SOME_PHP_PROJECT/vendor

このような形にします。

ダミーの volumes を作成し、そこに除外したいディレクトリのパスを記述することで、ダミーの volumes の方がマウントされるため仮想マシン上の vendor 等がホストマシンとは同期されなくなる、ということですね。

これでファイル数が多いためにマウントに時間を費やしていた部分がかなり高速化できるので時短になります。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。