我以为我只是想分享这个。因此,我正在使用 Dockerfile 测试使用 Nodejs 应用程序创建 docker 映像/容器。一切都很顺利,直到我尝试添加 .dockerignore 文件,我在其中列出了以下文件,希望它们不会被复制到 docker 映像中:
node_modules
dockerignore
Dockerfile
Run Code Online (Sandbox Code Playgroud)
这是我的 Dockerfile:
FROM node:latest
WORKDIR /app
ADD . .
RUN npm install
CMD node index.js
Run Code Online (Sandbox Code Playgroud)
因此,我使用现有的 Dockerfile 和新的 .dockerignore 文件废弃并重建了我的映像。创建后,我跑去docker run -it --entrypoint sh <image name>检查那些文件/文件夹是否不再出现。
Dockerfile并.dockerignore消失了。但node_modules文件夹仍然存在。
我花了一段时间才“意识到”node_modules图像中的文件夹可能是由 Dockerfilenpm install步骤创建的,而不是从主机复制的文件夹。
我对吗?
所以我根据 tkausl 和 David Maze 的评论得到了答案(谢谢大家!)。
图像内部node_modules是从 Dockerfile 的“npm install”步骤生成的。
至于问题:
如果
.dockerignore不包含node_modules,Dockerfile 无论如何都会被覆盖node_modules?那么为什么还要费心放入node_modules.dockerignore 文件呢?
我收到的评论是,如果我从 .dockerignore 文件中遗漏了 node_modules,那么 docker 构建过程会由于不必要的复制而减慢node_modules,而且图像会更大。
因此,谨慎的做法是保留node_modules内部.dockerignore文件,以提高流程效率docker build。
更新:我确实尝试运行node_modules从 .dockerignore 文件中删除的场景,并且图像显示 940MB,而在文件node_modules内部创建图像.dockerignore- 尽管该过程可能更有效 - 输出图像为 942MB(大 2MB) 。
| 归档时间: |
|
| 查看次数: |
14168 次 |
| 最近记录: |