Webpacker は Docker でコンパイルが非常に遅い

概要

数日前に Docker 化した Rails 6 アプリケーションがあります (現時点では開発環境用)。イメージにいくつか問題がありましたが、なんとか修正できました。今ではアプリケーション全体がスムーズに動作し、Docker ですべてが正常に動作します。

唯一の問題は、Webpacker のコンパイルに時間がかかりすぎることです。 Docker を使用する前はすでに 30 秒ほどかかっていましたが、現在では最大 5 分、最短でも 3 分かかることがあります。

ボリュームを利用して、packs フォルダーをキャッシュしてみました。 - ./public/packs:/app_name/public/packs:cached しかし、何も変わっていなかったようです。

他の解決策はありますか?

解決策

@β.εηοιτ.βε が述べているように、開発にはローカルに (ファイル システム上に直接) マウントされたボリュームを使用できます。

以下に、マルチステージを活用するために docker compose と Dockerfile を考慮したアプローチの組み合わせを追加した例を示します (私が提案しているのは一般的なソリューションであることに留意してください)。

docker-compose.yml

version: '3.9'

services:
  api: # or whatever name you use
    build:
      dockerfile: Dockerfile
      context: .
      # use just the development stage
      target: development
    command: <command to start in dev mode>
    expose:
      - ${PORT}
    ports:
      - ${PORT}:${PORT}
    env_file:
      - .env
    volumes:
      # use the local folder mapped to `/app` in container volume
      - .:/app
      - <directory_you_want_to_include_in_volume>:/app/<target_in_volume>

volumes:
  <directory_you_want_to_include_in_volume>:
    driver: local

Dockerfile

FROM <your_image> as development

# Create app directory
WORKDIR /app

# Copy source files
COPY . .

# Install with options as needed
RUN bundle install 

# Build API
RUN <any command to build/bundle your app>

# here the development build will stop, 
# and the start command of the docker compose file will take care.

FROM <your_image> as production

# Create app directory
WORKDIR /app

# Copy necessary files to run the app
COPY --from=development /app/<whatever_needed> ./

# Install only production dependencies
RUN <specific_production_bundler>

EXPOSE 80

CMD ["bundle", "exec", "rails"]