今の所のベストプラクティスとしては
Docker HubとGitHub Actionsを勉強していけば解決するでしょう。
.dockerignore
でdocker build
時のnode_modules
ディレクトリを無視するようにします
dockerfile
内でnpm install
をしてインストール
- もしこれらをDocker Hub等で配布するなら、GitHub Actionsのmainブランチが更新されたら自動で
docker build
→docker push
までしてくれるように設定すると漏れがなくて良いよね
どうするのが一般的?であり、親切なのかを知りたいです。
Dockerは配布されるimageの中身は
全ての依存モジュールが全て揃った状態で整っており、
後はdocker run
で起動できる状態になっているべきです。
例えばDocker Hubのmysqlを見れば分かりますが、
READMEのどこにもapt instlal
でMySQLをインストールしてから実行してね!なんて書いてありません。
docker run
で起動したら過不足ないMySQLサーバとして即座に実行されます。
そもそもDockerを使う大きなメリットの一つが、ライブラリの組み合わせで「ちゃんと動くモジュールが完成している」事ですから、
モジュールがバラバラでイチから集め直さなきゃいけないんだよ、
それじゃDockerかませるより生のLinuxのがいいよねって話です。
なので、配布されたimageからnpm install
してねはおかしいです。
とはいえ、UbuntuやCentOS、Alpine等のLinuxのディレクトリ構造が再現されただけのバニライメージや、
Node.jsだけが動く事が担保されたバニライメージもあります。
これらは全ての礎になり、そこから貴方の思い描く完成形を更に詰め込んで動作するimageを生成する為の材料となります。
これには例外もあります。
今回の質問文に最もその一番ありがちな例が、
Node.jsバニラのイメージをそのまま使い、docker run
時に外から注入して運用する場合です。
これは開発時タイミングで
とりまdocker-compose.yml
で用意しただけという状況ならそうなっている事が多いです。
質問文の内容が正式リリース時点でそうなら、(時間的な都合で)ほぼその状態のまま改良される事なく正式リリースしてしまったのだと考えられます。
Docker Hubに登録するにしても企業だと金かかるしね。
予算申請とかめんどくせ、となってる間に忘れたとかもありがちです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。