回答編集履歴
2
勘違いしてた箇所を削除
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
構
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`配下に含まれるはず
|
57
|
+
その場合はnode_modulesディレクトリは`.gitignore`配下に含まれるはずで、
|
58
|
+
`.dockerignore`で指定する必要すらなくなります。
|
59
|
+
|
60
|
+
GitHubなんかのmasterブランチが更新されたら、
|
61
|
+
CIツールが実行されて自動的にDockerImageが更新される。
|
62
|
+
これが勝ちパターンなので是非DroneやDockerHubの機能を覚えてみてください。
|