Я играю с пару дней Docker, и я уже сделал несколько снимков (это было действительно весело!). Теперь я хочу , чтобы упорствовать свою работу и пришел к save
и export
командам, но я не полностью понять их.
В чем разница между save
и export
в Docker?
Ответы:
Краткий ответ:
save
извлечет образ: для виртуальной машины или физического сервера это будет установочный образ .ISO или диск. Базовая операционная система.Он упакует слои и метаданные всей цепочки, необходимой для построения изображения. Затем вы можете загрузить эту цепочку «сохраненных» изображений в другой экземпляр докера и создать контейнеры из этих изображений.
export
получит весь контейнер: как снимок обычной виртуальной машины. Конечно, сохраняет ОС, а также любые сделанные вами изменения, любые файлы данных, записанные в течение срока службы контейнера. Этот больше похож на традиционную резервную копию.Это даст вам плоский архив .tar, содержащий файловую систему вашего контейнера.
Изменить: так как мое объяснение все еще может привести к путанице, я думаю, что важно понимать, что одна из этих команд работает с контейнерами, а другая работает с изображениями.
Изображение должно рассматриваться как «мертвый» или неизменны, начиная 0 или 1000 контейнеров из него не будет изменять один байт. Вот почему я сделал сравнение с системой установки ISO ранее. Возможно, это даже ближе к live-CD.
Контейнер «сапоги» изображение и добавляет дополнительный слой поверх него. Этот слой хранит любые изменения в контейнере (созданные / измененные / удаленные файлы ...).
источник
docker commit
). Я могу тогдаsave
изображение. Или я могуexport
контейнер напрямую. И оба пути (save
изображение иexport
контейнер) будут иметь одинаковый результат?export
даст вам плоский архив .tar, содержащий вашу файловую систему контейнера.save
упакует слои и метаданные всей цепочки, необходимой для построения изображения. Затем вы можете загрузить эту "saved
" цепочку изображений в другой экземпляр докера и создать контейнеры из этих изображений.export
функции.export
все метаданные будут потеряны, поэтому в случае, если вы попытаетесь запустить контейнер с этим изображением, вы повторно вызовете CMD и другие метаданные.save
работал хорошо для меня, но экспорт был больСуществуют две основные различия между
save
иexport
команд.save
Команда сохраняет все изображение с историей и метаданными, ноexport
команда экспортирует только структуру файлов (без истории и метаданных). Таким образом, экспортированный файл tar будет меньше сохраненного.При использовании экспортированной файловой системы для создания нового образа , то этот новый образ не будет содержать какие - либо
USER
,EXPOSE
, иRUN
т.д. команды из вашего Dockerfile. Будет передана только структура файла. Поэтому, когда вы используете упомянутые ключевые слова в вашем Dockerfile, вы не можете использовать команду экспорта для передачи изображения на другой компьютер - вам всегда нужно использовать команду save.источник
На экспортированном изображении не будет сохранено никакой информации о слое или истории, поэтому оно будет меньше и вы не сможете выполнить откат.
Сохраненное изображение будет иметь информацию о слое и истории, поэтому оно будет больше.
Если вы даете это клиенту, вопрос в том, хотите ли вы сохранить эти слои или нет?
источник
Технически, сохранение / загрузка работает с репозиториями, которые могут быть одним или несколькими изображениями, также называемыми слоями. Изображение представляет собой один слой в репо. Наконец, контейнер - это созданное изображение (работает или нет).
источник
Сохранение Docker Создает репозиторий tar-файла, который содержит все родительские слои и все теги + версии или указанный тег repo: для каждого аргумента, представленного на изображении. .
Экспорт из Docker Создает указанный файл (может быть tar или tgz) с плоским содержимым без содержимого указанных томов из контейнера. .
Сохранение Docker необходимо использовать в образе Docker, в то время как экспорт Docker необходимо использовать в контейнере (так же, как запущенный образ)
Сохранить использование
Использование экспорта
источник
export
:container (filesystem)
->image tar
.import
:exported image tar
->image
. Только один слой.save
:image
->image tar
.load
:saved image tar
->image
. Все слои будут восстановлены.Из Докера в действии, второе издание, стр. 190.
источник