2016-03-29 4 views
1

Как правило, понимается, что если команда RUN очищается после больших операций с файлами, результирующий размер слоя будет меньше. Однако, когда я выполняю следующий скрипт, результирующий слой является большим и примерно соответствует размеру файлов, которые первоначально были скопированы и очищены.Dockerfile RUN создает слой жира даже при очистке

Как можно зафиксировать этот размер слоя, если файлы, скопированные, очищены на одном уровне?

RUN mkdir -p /etc/puppet && \ 
    cd /etc/puppet && \ 
    apt-get update && apt-get install -y wget puppet && \ 
    wget -rnH --level=10 -e robots=off --reject "index.html*" http://somefileserver.org/puppet/allpuppetstuff && \ 
    puppet module install puppetlabs/stdlib && \ 
    puppet module install 7terminals-java && \ 
    puppet apply -e "include someserver" && \ 
    apt-get purge -y --auto-remove puppet wget && \ 
    rm -rfv /etc/puppet/* && \ 
    rm -rfv /var/lib/apt/lists/* 
+0

Попробуйте выполнить эксперимент: запустите оболочку в контейнере, используя изображение перед командой 'RUN'. Затем, используя 'df' для проверки использования, сначала посмотрите на место на диске, после запуска' apt-get update', после установки после 'apt-get-purge' и после удаления всех других файлов. –

+0

Возможно, вам стоит попробовать «apt-get install -y -no-install-рекомендует wget puppet' – user2915097

ответ

1

Нашли несколько подробностей после нескольких твиков.

Кажется, дубликат дубликатов на старом слое, если новый слой изменяет файлы, сохраненные на более раннем. Это является причиной слоя жира, созданного вышеуказанной командой RUN, даже если общий размер файла diff в конце операции минимален. Я не мог найти каких-либо определенных ресурсов, чтобы ссылаться на это, но это опыт до сих пор.

В принципе, операции с файлами, связанные с изображением, всегда должны выполняться в одном слое.

Смежные вопросы