我有一个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 Daemon。
这意味着将发送PATH中的所有文件,而不仅仅是Dockerfile中列为ADD的文件。
如果排除node_modules
文件夹和任何其他不必要的大目录/文件,则可能是构建速度更快。
另外还有一些最佳实践
# add git-ignore syntax here of things you don't want copied into docker image
.git
*Dockerfile*
*docker-compose*
node_modules