Docker でコンテナを作成する際にボリュームを指定するとコンテナの内容を上書きしてしまうため、node_modules などが消える現象を防ぐ

全体

Dockerfileyarn install*1 をして node_modules 配下にライブラリがインストールされたイメージが作成されたとします。このイメージからコンテナを作成する場合、例えば /path/to:/app のようにボリュームを指定すると、せっかく作られた node_modules が跡形もなく消え去ってしまいます。

これを防ぎます。

方法

local にボリュームを作成し、そこにコンテナの node_modules を同期させるようにします。

docker-compose.yml で例を示します。

version: '3.8'

services:
  web:
(中略)
    volumes:
      - npms_storage:/myapp/node_modules
      - /path/to:/myapp
(中略)

volumes:
  npms_storage:

上記のように書くことで、コンテナ作成時に node_modules は維持されます。

そしてまた、コンテナ側の node_modules とホスト側の node_modules は別物になる(=同期されない)ので、例えば ESLint や Prettier などのリアルタイム Lint を使えることになります*2

*1:or npm install

*2:もちろんそのためには、ホスト側でも $ yarn install or $ npm install をする必要があります

Powered by はてなブログ