
类型:虚拟化技术
简介:基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。
Docker 构建镜像时,会把构建上下文发送给 Docker 引擎。如果项目目录里包含 node_modules、日志、缓存、测试文件、密钥或大文件,构建会变慢,镜像构建过程也可能暴露不该进入上下文的内容。.dockerignore 的作用,就是在构建前排除不需要的文件。
一、为什么需要 .dockerignore
常见问题:
- 构建速度慢。
- 上下文体积过大。
- 本地依赖被复制进去。
- .env 文件误进入构建流程。
- 日志和缓存干扰镜像。
.dockerignore 不是镜像优化的全部,但它是构建前最容易忽略的一步。
二、基础写法
在项目根目录创建:
.dockerignore
常见内容:
.git
node_modules
npm-debug.log
*.log
.env
.env.*
dist
coverage
.cache
.DS_Store
这表示这些文件和目录不会进入构建上下文。
三、不要把必要文件忽略掉
如果 Dockerfile 中需要复制 dist,就不能把 dist 忽略掉。规则要结合构建流程设计。
例如:
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
这种构建方式通常应忽略本地 node_modules,但不要忽略 package.json 和锁文件。
四、敏感文件要重点排除
建议排除:
- .env
- 私钥文件
- 本地证书
- 数据库备份
- 临时导出文件
- 编辑器缓存
- 本地日志
即使 Dockerfile 没有显式复制这些文件,也建议从上下文中排除。
五、检查构建上下文
构建时可以观察输出中的上下文大小。如果上下文过大,优先检查 .dockerignore。
docker build -t example-app .
如果项目很小但上下文显示几百 MB,通常说明本地依赖、缓存或构建产物没有排除。
FAQ
问:.dockerignore 和 .gitignore 一样吗?
不一样。.dockerignore 控制 Docker 构建上下文,.gitignore 控制 Git 跟踪文件。
问:node_modules 要不要忽略?
大多数 Node.js 项目应忽略本地 node_modules,在镜像内重新安装依赖。
问:.env 要不要写进 .dockerignore?
建议写入,避免敏感配置进入构建上下文。

