Занимают ли промежуточные Docker образы дисковое пространство? - PullRequest
0 голосов
/ 23 января 2020

Если в файле docker есть команды RUN, он создает промежуточные изображения. У меня вопрос, занимают ли такие промежуточные образы какую-либо память вашего жесткого диска? Если да, то docker build --rm должно быть достаточно?

Ответы [ 2 ]

2 голосов
/ 23 января 2020

RUN создает не промежуточные изображения , а промежуточные слои / контейнеры .

Если вы запустите docker build --rm, эти контейнеры будут удалены после того, как они будут сгенерированы, так что да, это сэкономит место на вашем диске, но будет нуждаться в большем количестве времени каждый раз, когда вы перестраиваете тот же образ, так как он будет создавать те слои каждый раз, когда они не кэшируются.

Редактировать (спасибо @Shashank V): опция --rm установлена ​​по умолчанию, поэтому наличие или отсутствие значения не имеет.

1 голос
/ 24 января 2020

Да, промежуточные слои занимают место на диске, и обычно это хорошо. Это облегчает повторное использование слоев и быстрое построение. Вместо этого вам следует сконцентрироваться на сокращении количества слоев путем оптимизации файла Docker. Ваше окончательное docker изображение на самом деле является комбинацией всех слоев. Таким образом, вы не можете удалить слои, если не удалите окончательное изображение и никакое другое изображение не использует слои.

docker build --rm не экономит дополнительное дисковое пространство. Чтобы понять почему, вы должны знать, как работает docker build - каждая инструкция (например, RUN) в файле Docker запускает новый контейнер, после выполнения инструкции контейнер завершает работу и фиксируется в изображении.

docker build --rm удаляет эти промежуточные контейнеры . Параметр --rm по умолчанию имеет значение true, поэтому docker build --rm не оказывает дополнительного влияния по сравнению с docker build. По какой-то причине, если вы хотите сохранить промежуточные контейнеры, вы можете отключить их с помощью --rm=False.

Если есть какие-либо слои, которые не используются никакими другими изображениями, вы можете удалить их. Они называются dangling слоями. Вы можете удалить их с помощью следующей команды -

docker rmi $(docker images -f "dangling=true" -q)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...