Как уменьшить размер изображения Docker


12

У меня есть контейнер с GlassFish. Когда я попытался зафиксировать изображение, оно стало 14GB. Позже я удалил /tmp/в контейнере, который был 10 ГБ, и попытался зафиксировать изображение, но все равно это 14 ГБ. Кажется, что удаление файлов из контейнера не отражается на размере изображения. Как мне исправить эту проблему?


1
Никто не может сделать какие-либо рекомендации, не зная немного больше о вашей настройке. Что такое Dockerfile? Какое дерево файлов добавляется в контекст сборки Docker? Официальный glassfishобраз Docker составляет около 1 ГБ. Хотя это чертовски большое изображение для Docker, оно все же намного меньше, чем то, что вы, похоже, строите.
— Энди Шинн

Смотрите этот ТАК вопрос для Howto. Кроме того, этот поиск Google имеет ряд соответствующих статей.
— Миша Брукман

Ответы:


9

Проблема, с которой вы можете столкнуться, состоит в том, что удаление файлов в коммите не меняет того факта, что файл был там в предыдущем изображении, так что предыдущее изображение все еще 14G.

Посмотрите на часть «Слои» в этой статье: http://woudenberg.io/reduc-docker-image-size/

Чтобы решить эту проблему, вам нужно удалить вещи из / tmp / в исходном коммите, который их сгенерировал, поэтому изображение, созданное в результате этого коммита, не включает их. Это легко при использовании dockerfiles, но не уверен, если это возможно при создании изображений с коммитами.

Еще одна вещь, которую вы можете сделать, это сквош слои путем экспорта / импорта изображения.


4

Продолжая ответ @Juan Antonio, Dockerfileвыполнение этого не сэкономит место:

RUN apt-get install -y foo bar
...
RUN apt-get purge --auto-remove -y foo bar

Вместо этого вам нужно сделать следующее:

RUN apt-get install -y foo bar && \
    && ... \
    && apt-get purge --auto-remove -y foo bar

С другой стороны, это означает меньшее кэширование, так как если что-то изменится в этой большой командной строке, Docker придется заново запускать весь набор команд.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.