在Visual Studio Code的Docker扩展中,在Dockerfile模板中,将node_modules目录移动到父目录。我说的是this line:
RUN npm install --production --silent && mv node_modules ../
为什么要这么做?
答案 0 :(得分:1)
这是为了利用Docker中的缓存机制。通常,您的Dockerfile
中将包含以下内容:
1. RUN apt-get #bunch of stuff you want installed
2. COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
3. RUN npm install --silent && mv node_modules ../
4. COPY . .
5. CMD node index.js
Docker在“图层”中构建其映像,您可以想到执行Dockerfile
中每一行时所添加的每一层。
然后我们在上面的摘录中说的是:
apt-get
并将层提交到缓存package.json
文件从主机复制到容器中,提交层npm install
,然后将node_modules
文件夹上移一个目录,npm
将向上递归搜索,直到找到node_modules folder
,因此您的应用将不在乎。提交此层。node index.js
该系统的优点在于,Docker仅在自上次构建容器以来发生变化的地方重新构建容器。因此,在我们的情况下,只有上一层发生更改(例如更新的npm install…
),它才会运行package.json
。否则,即使npm install
可能已更改,它也不会执行index.js
命令。
当然,请记住,您应该在node_modules
文件中列出.dockerignore
,以使COPY . .
不会尝试提取它。