暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

为什么dockerignore可以加速镜像构建

运维笔谈 2024-02-23
58

当我们运行docker build的时候,Docker会把当前目录的所有文件通过UNIX Domain Socket发送给Docker Deamon进程。

如果你的项目有太多的文件,那么docker build 会非常慢。比如前端项目的node_modules文件夹通常会有大量依赖。

Dockerignore文件的作用类似于 `.gitignore`,它允许开发者指定在构建 Docker 镜像时应忽略的文件和目录列表。通过使用 `Dockerfile.dockerignore` 文件,可以显著提高镜像构建速度的原因如下:

1. 减少上下文传递量

当执行 `docker build` 命令时,Docker 客户端会将 Dockerfile 所在目录及其子目录下的所有文件打包成一个上下文 tar 包,并将其发送到 Docker 引擎中用于构建镜像。如果这个目录包含大量不必要的大文件或不需要编译、复制进镜像的文件(如日志文件、编译输出、缓存等),那么通过忽略这些文件,可以大幅度减小上下文包的大小,从而减少网络传输时间和引擎解压时间。

2. 加速构建过程

在构建过程中,`COPY` 或 `ADD` 指令会将上下文中的文件复制到镜像中。如果有大量的无用文件被包含在内,那么每次执行这些指令时都会浪费时间去处理它们。通过在 `dockerignore` 中排除这些文件,能够避免不必要的文件操作,直接提升构建步骤的速度。

3. 保持镜像精简

除了对构建速度有直接影响外,合理使用 `Dockerignore` 还有助于生成更精简的镜像。较小的镜像意味着更少的存储占用,并且可能更快地在网络上传输和分发,同时也有助于容器启动速度的提升。

常见的模板参考

1.nodejs

.dockerignore

node_modules

.git

.gitignore

2.maven

仅包含target目录

.dockerignore

*

!Dockerfile

!target


文章转载自运维笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论