Как docker загружает diff-образ

#docker

#docker

Вопрос:

Я знаю, что docker save могу сохранить изображение в tar и использовать docker load для перезагрузки изображения.

Например:

У меня есть машины A и B. B, которые не могут подключить концентратор. A — это изображение: последнее, а B — изображение: базовое.

Я должен сохранить несколько изображений в A как некоторый tar-файл, но файлы tar слишком велики для передачи.

Могу ли я сохранить разницу между тегами или идентификаторами изображений в A и загрузить разницу в B?

Не сохранять все изображение, что помогает обновлять патч намного меньше.

Ответ №1:

Это невозможно с использованием стандартных инструментов Docker. Единственный вариант, который docker save требуется, — это возможность записи в файл, а не в стандартный вывод, и он всегда содержит все родительские слои (и базовые изображения).

Если ваша единственная проблема заключается в переносе изображений, рассмотрите либо методы уменьшения размера изображения (например, используйте многоступенчатое изображение, чтобы не включать зависимости во время сборки в итоговое изображение), либо используйте такие инструменты, как split (1), чтобы разбить файл tar на более мелкие части.

Я полагаю, что docker save вывод файла tar такой же, как при вызове API «Экспортировать изображение». Возможно, можно вручную отредактировать этот tar-файл для удаления слоев, и могут существовать инструменты, которые это делают. (Однако это не особенно распространенный путь; я изучал его несколько лет назад, но сам этого не делал, и иногда вижу инструменты, упомянутые в нечастых ответах SO.)

В промежутке между стандартным поведением docker pull и docker save созданием только полных цепочек изображений, в принципе, нет способа настроить Docker так, чтобы у вас никогда не было только «верхней половины» изображения, но не базовых слоев под этим. Редактирование docker save файлов tar вручную нарушило бы этот инвариант.

Комментарии:

1. Я использовал многоступенчатый способ уменьшения размера изображения. Но у меня есть несколько изображений для сохранения, и общий размер слишком велик: (