Влияет ли размер контекста сборки на размер изображения?
Когда я создаю изображения с 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
в котором отсутствуют файлы, которые вам не нужны.