Влияет ли размер контекста сборки на размер изображения?

Когда я создаю изображения с docker build вывод содержит размер контекста, например:

Sending build context to Docker daemon  1.315GB
[...]
Successfully built a9ec4d33e12e

Влияет ли этот размер на размер результирующего изображения? Должен ли я стремиться его уменьшить?

3 ответа

Решение

Влияет ли этот размер на размер результирующего изображения?

Нет

Должен ли я стремиться его уменьшить?

Да. Это экономит время на построение изображения.

источник:

https://medium.com/better-programming/docker-tips-about-the-build-context-dbc76505e178

Когда ты бежишь docker build он отправляет все файлы в Dockerfile'' и все подкаталоги передаются демону Docker. Это происходит при условии, что вашDockerfileвероятно, будет ссылаться на все эти файлы, но учтите, что он не проверяет вашDockerfileчтобы выяснить, какие файлы отправлять. Он просто все отправляет.

Есть несколько способов уменьшить размер контекста сборки:

  • Положить ваши Dockerfileв своем собственном каталоге только с необходимыми файлами. Например, вместо того, чтобы иметьDockerfile на верхнем уровне вашего проекта поместите его в отдельный подкаталог.

  • Написать .dockerignoreфайл, в котором перечислены файлы, которые нужно исключить из контекста сборки. Когда вы не можете переместить файлы в сторону, это лучший вариант.

Влияет ли этот размер на размер результирующего изображения?

Да и нет. Слишком большой контекст сборки не приведет к увеличению размера изображения. Дополнительные файлы в контексте сборки, которые не используютсяDockerfile просто выбрасываются.

Однако, если вы используете .dockerignore игнорировать файлы, которые Dockerfileдействительно использует то, что может уменьшить размер изображения (и потенциально сломать его). Игнорирование файлов вызоветCOPY . /app например, чтобы скопировать меньше файлов.

Должен ли я стремиться его уменьшить?

Да. Это ускорит процесс сборки.

Да, контекст сборки в некоторых случаях может влиять на размер изображения.

Если вы это сделаете:

COPY . /app

Тогда все в контексте будет скопировано в /app на изображении.

Если вы копируете только явные подмножества контекста, например COPY mydir/ app/, то размер контекста не повлияет на размер изображения, только содержимое mydir повлияет на размер изображения.

Вы должны создать .dockerignore в котором отсутствуют файлы, которые вам не нужны.

Другие вопросы по тегам