【发布时间】:2020-05-20 15:27:37
【问题描述】:
我有一个 Angular 项目。我用ng build --prod 构建它。然后我基于 nginx 容器构建了一个 docker 容器。只有我添加到这个 docker 容器的东西是 dist 文件夹及其内容和 nginx.conf。这是我的 Dockerfile:
FROM nginx
COPY dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
在我的 dist 文件夹中没有太多内容。通常缩小的 js 目标文件和不超过 1MB 的其他资产(如图片)。
现在,如果我运行docker build .,那么有时最多需要 10 分钟才能出现任何日志,然后我得到“将构建内容发送到守护进程”等,最后成功。我注意到,如果我在 Angular 项目中更改某些内容并重新构建项目,则需要这 10 分钟。
所以流程是:
$ docker build .
(something happening here, it just does something without any logs for 10 minutes)
Sending build context to Docker daemon 627.5MB
Step 1/3 : FROM nginx
Step 2/3 : COPY dist /usr/share/nginx/html
---> e831f2851f75
Step 3/3 : COPY nginx.conf /etc/nginx/nginx.conf
---> f6264feec52b
所以我的问题是,是什么让 Docker 停了这么长时间,我怎样才能让它更快?
【问题讨论】:
-
您可以在您的项目中添加一个
.dockeringore文件来忽略您的node_modules目录,因为它通常很大并且可能需要很长时间才能将其发送到构建过程。 -
我的 node_modules 不在构建上下文中。只有 dist 文件夹在并且 node_modules 不在 dist 文件夹中。或者它只是因为它与我的 Dockerfile 在同一个文件夹中而影响东西,即使我没有将它添加到 docker?
-
构建上下文是
docker build命令指定的目录。这是最后一个参数。 Docker 获取所有构建上下文,然后在其上应用构建命令(如COPY dist /usr/...) -
每天学习新东西。太感谢了。现在我的发布流程从 11 分钟缩短到了 1 分钟。