В чем разница между сохранением и экспортом в Docker?

Я играю с Docker в течение нескольких дней, и я уже сделал несколько изображений (что было действительно забавно!). Теперь я хочу сохранить свою работу и пришел к командам save и export, но я не совсем их понимаю.

В чем разница между save и export в Docker?

Ответ 1

Короткий ответ:

  • save будет извлекать изображение: для виртуальной машины или физического сервера это будет образ .ISO установки или диска. Базовая операционная система.

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

  • export будет извлекать весь контейнер: как моментальный снимок обычной виртуальной машины. Конечно, экономит ОС, но также и любые сделанные вами изменения, любой файл данных, записанный во время жизни контейнера. Это больше похоже на традиционную резервную копию.

    Это даст вам плоский архив .tar, содержащий файловую систему вашего контейнера.

Изменить: поскольку мое объяснение все еще может привести к путанице, я думаю, что важно понимать, что одна из этих команд работает с контейнерами, а другая - с изображениями.

  • изображение должно считаться "мертвым" или неизменным, начиная с 0 или 1000 контейнеров от него не будет изменяться один байт. Вот почему я сравнил систему с системой ISO ранее. Возможно, это еще ближе к live-CD.

  • A контейнер "загружает" изображение и добавляет дополнительный слой поверх него. Этот слой сохраняет любые изменения в контейнере (созданные/измененные/удаленные файлы...).

Ответ 2

Есть два основных различия между командами save и export.

  1. Команда save сохраняет все изображение с историей и метаданными, но команда export экспортирует только структуру файлов (без истории и метаданных). Таким образом, экспортированный файл tar будет меньше сохраненного.

  2. Когда вы используете экспортированную файловую систему для создания нового образа, тогда этот новый образ не будет содержать никаких команд USER, EXPOSE, RUN и т.д. Из вашего Dockerfile. Будет передана только структура файла. Поэтому, когда вы используете упомянутые ключевые слова в своем Dockerfile, вы не можете использовать команду экспорта для передачи изображения на другой компьютер - вам всегда нужно использовать команду save.

Ответ 3

Технически, сохранение/загрузка работает с репозиториями, которые могут быть одним или несколькими изображениями, также называемыми слоями. Изображение представляет собой один слой внутри репо. Наконец, контейнер представляет собой экземплярное изображение (работает или нет).

Ответ 4

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

Сохраненное изображение будет иметь информацию о слое и истории, поэтому будет больше.

Если вы даете это клиенту, Q - вы хотите сохранить эти слои или нет?

Ответ 5

Docker сохранить Производит репозиторий tar файла, который содержит все родительские слои, и все теги + версии или указанный тег repo: для каждого аргумента, предоставленного изображением.

Docker export Производит указанный файл (может быть tar или tgz) с плоским содержимым без содержимого указанных томов из Контейнера.

docker сохранить нужно использовать на изображении докеров, а docker экспортировать нужно использовать на контейнере (точно так же, как работает образ)

Сохранить использование

Сохранение докеров [ОПЦИИ] ИЗОБРАЖЕНИЕ [ИЗОБРАЖЕНИЕ...]

Сохраните изображение в архив tar (по умолчанию передано в STDOUT)

- help = false Использовать печать -o, --output = "" Запись в файл, вместо STDOUT

export Использование

Экспорт докеров [ОПЦИИ] КОНТЕЙНЕР

Экспортировать содержимое файловой системы контейнера в архив tar

- help = false Использовать печать -o, --output = "" Запись в файл, вместо STDOUT