Как работает новый Docker --squash

В Docker 1.13 был добавлен новый параметр --squash.

Теперь я надеюсь уменьшить размер моих изображений, а также иметь возможность скрывать секретные файлы, которые у меня есть в моих слоях.

Ниже вы можете увидеть разницу между выполнением сборки с параметром --squash и без него.

Без сквоша

введите здесь описание изображения

С сквошем

введите здесь описание изображения

Теперь мой вопрос.

Если я добавлю секретный файл в свой первый слой, затем использую секретный файл в моем втором слое и, наконец, удалю секретный файл в третьем слое. strong> слой, а затем построить с флагом --squash.

Будет ли теперь какой-либо способ получить секретный файл?


person Fore    schedule 20.01.2017    source источник


Ответы (1)


Если я добавлю секретный файл в свой первый слой, затем использую секретный файл во втором слое и, наконец, удалю свой секретный файл в третьем слое, а затем создам с флагом --squash.

Будет ли теперь какой-нибудь способ получить секретный файл?

Ответ: на вашем изображении не будет секретного файла.

Как работает --squash:

После завершения сборки Docker создает новый образ, загружая различия из каждого слоя в один новый слой и ссылаясь на все родительские слои.

Другими словами: при сжатии Docker берет все слои файловой системы, созданные сборкой, и сворачивает их в один новый слой.

Это может упростить процесс создания минимальных образов контейнеров, но может привести к немного более высоким накладным расходам при перемещении изображений (поскольку сжатые слои больше не могут быть разделены между изображениями). Docker по-прежнему кэширует отдельные слои, чтобы ускорить последующие сборки.

Обратите внимание, что эта функция сжимает все вновь созданные слои в один слой, а не сжимает их до нуля.

Примечания:

Docker 1.13 также поддерживает сжатие контекста сборки, который отправляется из CLI в демон с использованием флага --compress. Это ускорит сборку, выполняемую на удаленных демонах, за счет уменьшения объема отправляемых данных.

Обратите внимание, что в Docker 1.13 эта функция является экспериментальной.

person Farhad Farahi    schedule 20.01.2017
comment
Если бы вы сделали это без --squash, был бы файл каким-то образом доступен для чтения слоев в файловой системе? С тестом, который я сделал, он говорит, что отсутствуют слои, в которых есть секретный файл, я предполагаю, что это означает, что к секретному файлу нельзя каким-либо образом получить доступ, копаясь в слоях? - person BeefCake; 01.07.2020
comment
Если вы опубликовали или распространили изображение, да, кто-то мог зайти в один из других слоев и посмотреть секретный файл. Вы когда-нибудь замечали, что когда вы извлекаете образ Docker, вы иногда видите, что он извлекает несколько слоев? Вы заметите, что у каждого слоя есть хэш-идентификатор — вы можете использовать эти хэш-идентификаторы напрямую для запуска контейнеров из любого слоя в стеке. Оттуда пользователь может переопределить точку входа и команду, получить оболочку и поковыряться. (Или они могут просто заглянуть в папку /var/lib/docker и покопаться там.) - person fdmillion; 08.04.2021