teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

勘違いしてた箇所を削除

2019/01/08 09:52

投稿

miyabi-sun
miyabi-sun

スコア21445

answer CHANGED
@@ -30,21 +30,6 @@
30
30
 
31
31
  ---
32
32
 
33
- > Dockerfile
34
- npm installコマンドはキャッシュが効くようにアプリコードより先に単体でコピーしています。
35
-
36
- `npm install`コマンドの結果はpackage.jsonとpackage-lock.jsonの状態で一意に決まるべきなので、
37
- コマンドの文字列のみで判断するDockerにキャッシュを作ってもらうのはナンセンスです。
38
- ビルド時に`--no-cache`オプションは半ば必須になりますから、
39
- 上記の理由で「キャッシュが効くように先にコピー」というのが全くメリットとして機能していません。
40
-
41
- ソースコードを含めてまるごと
42
- DockerHubの有料プランなり、ローカルのDockerHubクローン鯖なりで預かってもらって、
43
- 本番環境ではpullして動かすだけというところがゴールでしょうか?
44
-
45
- この方向性はDockerを扱う上で理想的ですが、
46
- package.jsonを先にコピーするまでもなく、`.dockerignore`に`app/node_modules`みたいな事を書いておけばcopy時に勝手に弾かれるのでそれでやればいいじゃんと思います。
47
-
48
33
  > ライブラリ更新のたびにホストとコンテナで二重に実行する必要があるのでできれば避けたいです。
49
34
 
50
35
  これはおっしゃる通り。

1

2019/01/08 09:52

投稿

miyabi-sun
miyabi-sun

スコア21445

answer CHANGED
@@ -1,10 +1,6 @@
1
1
  もうこんな風にローカルは生のalpine使って、
2
2
  DroneみたいなCIツールにDockerBuildさせるような構成にしたほうがいいです。
3
3
 
4
- ローカルにVSCodeとNode.jsをインストールしている時点で
5
- 環境を汚さないとか言ってても理想と現実がもう相当剥離してるんですが???状態になってます。
6
- なので、ローカルにnode_modulesを作るという運用は避けられないでしょう。
7
-
8
4
  docker-compose.yml
9
5
 
10
6
  ```yaml
@@ -19,6 +15,21 @@
19
15
  - .:/app
20
16
  ```
21
17
 
18
+ ローカルにVSCodeとNode.jsをインストールしている時点で
19
+ 環境を汚さないとか言ってても理想と現実がもう相当剥離してるんですが???状態になってます。
20
+ なので、ローカルにnode_modulesを作るという運用は避けられないでしょう。
21
+
22
+ 質問文の要件はみたせませんが、今の所これが自然かつモアベターな方法です。
23
+
24
+ ```bash
25
+ $ cd app
26
+ $ npm install
27
+ ```
28
+
29
+ もし何か完璧な案を思いついたら試してみて下さい。
30
+
31
+ ---
32
+
22
33
  > Dockerfile
23
34
  npm installコマンドはキャッシュが効くようにアプリコードより先に単体でコピーしています。
24
35
 
@@ -34,7 +45,18 @@
34
45
  この方向性はDockerを扱う上で理想的ですが、
35
46
  package.jsonを先にコピーするまでもなく、`.dockerignore`に`app/node_modules`みたいな事を書いておけばcopy時に勝手に弾かれるのでそれでやればいいじゃんと思います。
36
47
 
37
- そしてこのやり方は開発完了してデプロイする直前ものです。
48
+ > ラブラリ更新のたびにホストとコンテナで二重に実行する必要があるのでできれば避けたいです。
49
+
50
+ これはおっしゃる通り。
38
- 質問者さんがーカルでビルドする作りにしなほうが良いでしょう
51
+ 実はモダンなプジェクトはエンジニアが手作業でビルドすることは避けてます
52
+ (何が混入するかわからんし)
53
+
54
+ 簡易的にやるならDockerHubとGitHubを連携させて、masterブランチが更新されたら自動的にdocker buildが走ってイメージが更新されるということが可能ですし、
39
- Webhookから[Drone](https://knowledge.sakura.ad.jp/2729/)等のCIビルドしてデプロイする構成にするべきです
55
+ 凝ったことがしたければWebhookから[Drone](https://knowledge.sakura.ad.jp/2729/)等のCIツールを発火させて自動ビルドするような仕組みを築しましょう
56
+
40
- その場合はnode_modulesディレクトリは`.gitignore`配下に含まれるはずなので、`.dockerignore`で指定する必要すらありません。
57
+ その場合はnode_modulesディレクトリは`.gitignore`配下に含まれるはずで、
58
+ `.dockerignore`で指定する必要すらなくなります。
59
+
60
+ GitHubなんかのmasterブランチが更新されたら、
61
+ CIツールが実行されて自動的にDockerImageが更新される。
62
+ これが勝ちパターンなので是非DroneやDockerHubの機能を覚えてみてください。