Docker размер изображения не имеет смысла - PullRequest
0 голосов
/ 04 февраля 2020

Я создал базовый образ Ubuntu: Bioni c на моем компьютере. Первоначально супер большой размер, но я удалил 80% содержимого, запустив контейнер и затем зафиксировав. Если я попал в каталог root и выполнил команду «du -sh», он сказал, что использование диска составляет 4,5 ГБ. Любопытно, что размер docker изображения, когда я делаю «docker images», показывает 11 ГБ. После нажатия на концентратор docker я вижу, что он равен 3,34 ГБ. Поэтому я подумал, что, возможно, он что-то очистил перед сжатием? запустил новое изображение, удалил еще немного контента, зафиксировал и снова отправил. На этот раз «du-sh» сказал 3,0 ГБ, «docker images» по-прежнему сказал 11 ГБ и docker концентратор также 3,34 ГБ. Очевидно, что он сжимает файл объемом 11 ГБ, а не ожидаемый контент объемом 3,0 ГБ. Есть ли простой способ «очистить» изображение?

1 Ответ

0 голосов
/ 04 февраля 2020

Docker изображения построены из слоев. Когда вы добавляете новый слой, он не удаляет предыдущие слои, он просто добавляет новый, скорее как новый Git коммит - история все еще там.

Это означает, что когда вы удалили контент, вы сделали его невидимым, но он все еще там в более ранних слоях.

Вы можете увидеть слои и их размеры с помощью docker history yourimagename.

Ваши параметры:

  1. Убедитесь, что файлы, которые вам не нужны, не делайте это в первую очередь, например, с помощью .dockerignore.
  2. Используйте многоступенчатую сборку, чтобы создать новый образ из старого, используя только те файлы, которые вы нужно. https://docs.docker.com/develop/develop-images/multistage-build/
...