在项目中,我们见过很多各式各样的 ignore 文件。

背景

英文好的同学建议直接阅读文档:
https://docs.docker.com/engine/reference/builder/#dockerignore-file
比如使用 .gitignore 来忽略掉你不想追踪的文件:
https://git-scm.com/docs/gitignore
使用 .npmignore 来忽略你在发布包时不想发布的文件:
https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package

问题

那么 .dockerignore 文件是起什么作用的呢?
不管是在 docker build 过程中,还是 docker run 的过程中,有没有这个文件好像并没有什么很大的影响,存在感不强的一个文件。
首先需要理解一下 镜像构建上下文(context) 的概念,参见另一篇博文:
docker build 命令后 . 号的意思
理解了这个概念就明白,当我们在 docker build 的过程中,首先会将指定的上下文目录打包传递给 docker引擎,而这个上下文目录中可能并不是所有的文件我们都会在 Dockerfile 中使用到,那么这个时候就可以在 .dockerignore 文件中指定在传递给 docker引擎 时需要忽略掉的文件或文件夹。

举栗说明~

比如我们在前端项目中,node_modules 文件夹在构建镜像过程中如果用不到,但是又异常庞大,那么向 docker引擎 传递其实是并没有必要的(其实大家电脑性能都这么好,也不在乎这几秒钟了。。。只是举个例子,可以提升镜像构建速度),这个时候就可以将 node_modules 文件夹加入 .dockerignore 文件中。
如下所示,速度提升还是很明显的。
加入前:
.dockerignore 文件的作用 - 图1
加入后:
.dockerignore 文件的作用 - 图2

本文作者:Xu Sheng 本文链接:https://www.xuxusheng.com/post/dockerignore文件的作用/ 发表日期:2018年3月9日 更新日期:2021年4月29日 版权声明:Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)