Как уменьшить размер изображения 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.