将基于 nginx 构建的角度项目添加到 Docker 是非常慢的



>我有一个 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 停止了这么长时间,我怎样才能让它更快?

由于您正在谈论您的 Angular 应用程序,因此可能检查的是构建上下文。

确保忽略生成不需要的文件,以便通过向生成添加.dockerignore文件来提高性能。

Docker构建上下文(在您的情况下为.,即当前目录(将上传到 Docker 守护程序。

这意味着 PATH 上的所有文件都会被发送,而不仅仅是 Dockerfile 中列出的 ADD 文件。

请参阅 Docker 文档

如果您排除node_modules文件夹和任何其他不必要的大目录/文件,则您的构建速度可能会更快。


此外,一些最佳实践

# add git-ignore syntax here of things you don't want copied into docker image
.git
*Dockerfile*
*docker-compose*
node_modules

作者:Docker 船长 Bret Fisher - 好的 dockerignore 默认值

最新更新