Skip to content

Remove unnecessary npm packages from Docker image#709

Open
fetburner wants to merge 2 commits intol3tnun:masterfrom
fetburner:fetburner/devdependencies
Open

Remove unnecessary npm packages from Docker image#709
fetburner wants to merge 2 commits intol3tnun:masterfrom
fetburner:fetburner/devdependencies

Conversation

@fetburner
Copy link
Copy Markdown
Contributor

@fetburner fetburner commented Mar 27, 2025

Why

現在、l3tnun/epgstation で配布されている Docker イメージには ESLint 等のビルド時以外には不要な npm パッケージが含まれており、非圧縮状態で server と client 合わせて実に 410MB ほどイメージサイズを押し上げる結果となっています。
せっかく軽量なベースイメージを採用しているのに node_modules だけでイメージを重くしてしまうのは勿体無いので、配布イメージにはビルド時以外不要な npm パッケージを含まないようにしたいです。

What

各 Dockerfile でサーバーをビルド後、最終イメージへそれをコピーする前に npm prune --omit=dev を行って devDependencies を削除します。
加えて、クライアント側については vue-cli-service build でバンドルが行われており node_modules 自体が不要なことから、最終イメージへコピーする前に削除を行います。
これにより、配布イメージにビルド時以外不要な npm パッケージを含まないようにできるかと思います。

動作確認

mirakc 2.4.9 と MySQL 互換 DB(TiDB Serverless)を使ってサーバー側の devDependencies とクライアント側の node_modules を削除した alpine ベースのコンテナでも x64 環境でストリーミング、録画、録画の視聴、番組表の閲覧、更新といった一通りの動作を行えることを確認しました。
とはいえ FFmpeg を自前で用意する都合上、完全に同一の Dockerfile で検証できた訳ではないです。

@fetburner fetburner changed the title Remove "devDependencies" packages from Docker image Remove unnecessary npm packages from Docker image Mar 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant