LoginSignup
1
0

More than 3 years have passed since last update.

docker-composeのnode_modules問題にぶちあったたときにやった対処方法

Last updated at Posted at 2020-10-14

どんな問題?

最近、docker-composenodeの環境を構築するとき、コンテナ内のnode_modulesがどっかに行ってしまうという問題に遭遇した。

いろいろ調べてみると、docker-composeでローカルのディレクトリをコンテナ内にマウントする際に、上書きされてしまい、コンテナ内のnode_modulesが消えてしまっているようだ。

どう解決したの?

https://qiita.com/suin/items/e53eee56da23d476addc の記事などを見ると、volumesを作成し、node_modulesをそこにマウントすることで、回避することができるようだ。
しかし、これだとローカル環境にnode_modulesが生成されないため、TypeScriptでパッケージの型定義を参照できず、TypeScriptを使うことの旨味が薄れてしまう。

この問題を解決するために、docker-composecommandyarn installもすることで、コンテナ内のnode_modulesをローカルにマウントされるようにして、ローカルにnode_modulesを持ってくるようにしている記事を見た。
だが、この方法だとdocker-compose upをするときにyarn installが走ってしまうため、docker-compose upでまあまあな時間がかかってしまった。(ローカルにコンテナ内のnode_modulesを持ってくるのにもめちゃめちゃ時間がかかっているようだった)

そこで、以下のような方法で解決をするようにした。(この解決方法がBadであれば、教えていただけると勉強になります)

.
├── app
│   ├── Dockerfile
│   └── src
│       ├── package.json
│       └── yarn.lock
└── docker-compose.yml
Dockerfile
FROM node
WORKDIR /app
ADD src/package.json /app/
ADD src/yarn.lock /app/
RUN yarn install
docker-compose.yml
volumes: # ←追加
  app_node_modules: # ←追加
services:
  app:
    image: ./app
    volumes:
      - ./app/src:/app/
      - ./app/src/node_modules:/app/node_modules # ←追加
# 以下略

ここまでは https://qiita.com/suin/items/e53eee56da23d476addc の記事と同じだ。
これにプラスで、パッケージを追加したときに以下のスクリプトを実行すること(docker-compose buildの代わり)で、ローカルにもnode_modulesを生成するようにした。

build.sh
docker-compose build
cd app/src && yarn install

とりあえずこれで、node_modulesが消えてしまう問題と型定義がない問題を解決することができた。
しかし、ローカル環境にnodeがあることが前提になってしまっているため、もっといい解決方法があればいいな〜と思っている。(が、わからなかった)

おわりに

いい解決方法があればぜひ教えていただけると嬉しいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0