Як зменшити розмір зображення Docker


12

У мене є контейнер під керуванням GlassFish. Коли я спробував зробити зображення, він став 14 Гб. Пізніше я видалив /tmp/з контейнера розміром 10 ГБ і спробував зробити зображення, але все-таки зображення - 14 ГБ. Здається, що видалення файлів з контейнера не відображається в розмірі зображення. Як виправити цю проблему?


1
Ніхто насправді не може дати жодних рекомендацій, не знаючи трохи більше про вашу установку. Що таке Dockerfile? Яке дерево файлів додається до контексту збірки Docker? Офіційний glassfishобраз Докера становить близько 1 ГБ. Незважаючи на те, що проклято велике для зображення Докера, воно все ще набагато менше, ніж те, що ви, здається, будуєте.
— Енді Шінн

Дивіться це питання ТА для того, як вийти. Також у цьому пошуку Google є ряд релевантних статей.
— Міша Брукман

Відповіді:


9

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

Подивіться на частину шарів у цій статті: http://woudenberg.io/reducing-docker-image-size/

Щоб вирішити цю проблему, потрібно видалити речі під / tmp / в межах оригінальної комісії, яка їх генерувала, тому зображення, створене в результаті цього комітету, не включає їх. Це легко при використанні докер-файлів, але не впевнений, чи можливо, коли створюєте зображення з коміксами.

Ще одна річ, яку ви можете зробити, - це шари сквош, експортуючи / імпортуючи зображення.


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

Що стосується нижньої сторони, це означає менше кешування, так як якщо що-небудь зміниться у великому командному рядку, Докер повинен буде запустити весь набір команд.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.