Как ограничить копируемые файлы при использовании инструкции COPY в Dockerfile?

«Как ограничить копируемые файлы при использовании инструкции COPY в Dockerfile?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ограничить файлы, попадающие в образ через 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> для копирования только итоговых артефактов (например, скомпилированного бинарника) из предыдущей стадии, что минимизирует размер финального образа.