Ответ
Ограничить файлы, попадающие в образ через COPY, можно двумя основными способами: с помощью файла .dockerignore и за счет точного указания исходных путей.
1. Использование .dockerignore
Создайте файл .dockerignore в корне контекста сборки (рядом с Dockerfile). В нём укажите шаблоны файлов и директорий, которые должны быть исключены.
# Игнорировать ненужные для runtime файлы
.git
.gitignore
*.log
*.tmp
# Игнорировать зависимости и артефакты сборки
node_modules/
target/
dist/
# Игнорировать конфигурации для разработки
.env.local
docker-compose.override.yml
Это ускоряет сборку, уменьшая размер контекста, передаваемого Docker daemon.
2. Точное указание исходных путей в COPY
Вместо копирования всей директории (COPY . /app) явно укажите только необходимые файлы.
# Копируем только файлы, необходимые для установки зависимостей
COPY package.json package-lock.json /app/
# Копируем только исходный код, исключая тесты и документацию
COPY src/ /app/src/
COPY config/production.yaml /app/config/
Практический совет: В мультистадийных сборках используйте COPY --from=<stage> для копирования только итоговых артефактов (например, скомпилированного бинарника) из предыдущей стадии, что минимизирует размер финального образа.