.dockerignore文件用于在Docker构建时排除非必要文件,仅控制上传上下文而不改变镜像内容;它能显著提升构建速度、减小上下文体积、防止敏感信息泄露,是容器化部署的前置必需项。

直接缩小构建上下文体积,就能加快 Docker 构建起始阶段的传输速度。上下文打包慢,不是因为代码多,而是因为混进了大量非必要文件;关键不是删代码,而是精准排除干扰项。
用 .dockerignore 切掉无效文件
构建时 Docker 默认把整个目录打包上传,哪怕你只改了一行代码,只要上下文里有 node_modules 或 .git,体积就可能暴涨几十 MB。一份有效的 .dockerignore 能立竿见影:
- 必须排除:
.git、node_modules、__pycache__、dist/、target/、logs/、*.log、.env - 建议排除:
docs/、tests/、.idea、.vscode(IDE 配置不参与运行) - 检查是否生效:执行
docker build --no-cache -t test .时,命令行会显示 “Sending build context to Docker daemon XXX MB”——数字明显变小才算成功
避免 COPY . . 这类宽泛操作
一句 COPY . . 看似省事,实则把所有被忽略的文件也“逻辑上”纳入了构建路径,容易导致哈希不稳定、缓存失效。更稳妥的做法是显式指定:
- 只复制真正需要的:如
COPY requirements.txt .→RUN pip install ...→COPY src/ . - 静态资源单独处理:前端项目用
COPY dist/ /usr/share/nginx/html/,而非整个项目根目录 - 配置文件按需加载:把
config.yaml和entrypoint.sh单独 COPY,不带周边临时文件
重构项目结构,让构建上下文更“干净”
如果代码库长期混着文档、测试数据、历史备份,建议物理隔离:
- 把服务代码移到子目录(如
./service/),在该目录下放 Dockerfile 和 .dockerignore - 构建时指定路径:
docker build -f service/Dockerfile -t app ./service,上下文仅限 service 目录 - CI 流水线中可先用脚本清理临时产物,再压缩上下文目录再构建(尤其适用于含大型二进制资产的项目)
配合多阶段构建,进一步降低上下文敏感度
即使上下文稍大,也能通过构建阶段解耦来缓解影响:
- 构建阶段(builder)可以容忍较大上下文,但最终运行镜像只 COPY 编译产物(如 Go 的二进制、Python 的 wheel 包)
- 这样即便源码目录里有冗余文件,也不会污染最终镜像,也不影响运行层缓存稳定性
- 例如:Go 项目中
COPY . .在 builder 阶段执行,但运行阶段只COPY --from=builder /app/server .


















