>我有一个 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 默认值