質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

意見交換

クローズ

5回答

591閲覧

Dockerを利用したVueなどのアプリケーションの公開時のnpm installの扱い

nosuke09

総合スコア9

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1グッド

1クリップ

投稿2023/03/21 08:11

1

1

背景

dockerを利用したVueアプリケーションの公開
最近初めてVueを触ったのですが、環境依存性があり、dockerコンテナを利用する際はコンテナに入って
$ npm install
しないといけないことを知りました。(初学者なので勘弁)
個人で開発する分にはいいと思うのですが、作成したものを公開、ないし共有して利用してもらう場合
(デプロイしてアプリケーション自体を利用してもらうという意味ではない)
同様にコンテナに入ってから$ npm installしてね〜とREADMEに書くのはどうなんだろうと思っています。

知りたいこと

結局知りたいことですが、Dockerを利用したVueのアプリケーションを公開するときに
導入の際の手順として
$ npm install
してもらう必要があると思いますが、どうするのが一般的?であり、親切なのかを知りたいです。

自分の中の想像としては
・Dockerfileで記述してコンテナを立てたらnpm installが完了するようにする
くらいしか思いついてません。

logres_Fan👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答5

#1

dameo

総合スコア937

投稿2023/03/21 08:39

初心者ならWeb公開とdockerを使うのは一旦置いておいて、javascriptとvueの使い方をローカルでちゃんと学んだ方がいいと思います。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

kawax

総合スコア10377

投稿2023/03/21 09:27

vue程度で環境依存してることがおかしいけど
どうしてもDockerが必要ならREADMEに書くしかない。

## 必要な環境 - node.js v〇〇以上 - △△ ## Dockerを使う場合のインストール docker run ... ## Dockerを使わない場合のインストール △△が必須。 npm install

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

maisumakun

総合スコア145062

投稿2023/03/21 09:33

作成したものを公開、ないし共有して利用してもらう場合

通常は「コンパイルして出来上がったJavaScriptを公開」で片付くのですが、それでは問題となる背景事情はどのようなものでしょうか?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

miyabi-sun

総合スコア21145

投稿2023/03/22 03:31

今の所のベストプラクティスとしては
Docker HubとGitHub Actionsを勉強していけば解決するでしょう。

  • .dockerignoredocker build時のnode_modulesディレクトリを無視するようにします
  • dockerfile内でnpm installをしてインストール
  • もしこれらをDocker Hub等で配布するなら、GitHub Actionsのmainブランチが更新されたら自動でdocker builddocker 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に登録するにしても企業だと金かかるしね。
予算申請とかめんどくせ、となってる間に忘れたとかもありがちです。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

tee

総合スコア191

投稿2023/04/08 05:45

下記は私が普段使っているものです。
Imageをbuildしたタイミングで自動でnpm installされます
.dockerignoreも必要だと思います。 COPYした時にnode_modulesを除外するためのものです。

Dockerfile

1 2FROM node:18.14.2-buster 3 4WORKDIR /usr/src/app 5 6COPY package*.json ./ 7 8# npmを最新のversionにする && 上でコピーしてきたpackageに沿ってnpm install 9RUN npm install -g npm && npm install 10# 本番環境用の場合 11# RUN npm install --only=production 12 13COPY . .

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問