Короткий ответ
.dockerignore — файл в корне контекста сборки, который задаёт шаблоны файлов и папок, исключаемых из контекста перед отправкой демону Docker, аналогично .gitignore.
Как это работает подробнее
перед выполнением docker build клиент Docker упаковывает всю директорию контекста (обычно .) и отправляет её демону; .dockerignore фильтрует, какие пути не попадают в этот архив, а значит не могут быть скопированы COPY/ADD и не влияют на инвалидацию кэша слоёв.
Пример кода
.dockerignore
.git
node_modules
*.log
.env
DockerfileЧто использовать на практике
- Практика. в
.dockerignoreобычно исключаютnode_modules,.git, временные файлы сборки, большие дата-файлы и локальные секретные файлы (.env). Это ускоряет отправку контекста демону, уменьшает риск случайно скопировать ненужные или чувствительные файлы в образ и снижает вероятность лишней инвалидации кэша слоёв из-за неважных изменений (например, в.git).
Подводные камни
- Риск. забывают добавить
.gitи локальные.env/файлы с секретами в.dockerignore, из-за чего они случайно попадают в контекст, а затем (если ещё и скопированы инструкцией с широкой маской, напримерCOPY . .) — прямо в слои образа, откуда их потом трудно удалить.