Яка різниця між збереженням та експортом у Docker?


157

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

Яка різниця між Докером saveта exportв ньому?


4
Я також писав про це в блозі
Thomas Uhrig

Відповіді:


169

Коротка відповідь:

  • saveотримає зображення: для VM або фізичного сервера, це було б встановлення .ISO-зображення або диска. Базова операційна система.

    Він упакуватиме шари та метадані всього ланцюга, необхідних для створення зображення. Потім ви можете завантажити цю ланцюжок "збережених" зображень в інший екземпляр докера та створити контейнери з цих зображень.

  • exportотримає весь контейнер: як знімок звичайної VM. Зберігає ОС звичайно, але також будь-які внесені вами зміни, будь-який файл даних, записаний протягом життя контейнера. Цей скоріше нагадує традиційне резервне копіювання.

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

Редагувати: оскільки моє пояснення все ще може призвести до плутанини, я думаю, що важливо розуміти, що одна з цих команд працює з контейнерами, а інша працює із зображеннями.

  • Зображення повинно розглядатися як «мертвий» або незмінні, починаючи 0 або 1000 контейнерів з нього не буде змінювати один байт. Тому я раніше провів порівняння із системою встановлення ISO. Це, можливо, ще ближче до прямого CD.

  • Контейнер «чоботи» зображення і додає додатковий шар поверх нього. Цей шар зберігає будь-які зміни на контейнері (створені / змінені / видалені файли ...).


2
Просто для мого уточнення: припустимо, у мене є запущений контейнер, де я вніс деякі зміни (наприклад, я створив нову папку). Тепер я можу зробити зображення цього контейнера (з docker commit). Я можу тоді saveзображення. Або я можу exportбезпосередньо контейнер. І обидва способи ( saveзображення та exportконтейнер) матимуть однаковий результат?
Томас Угриг

2
Так і ні. exportДасть вам квартиру .tar архів , що містить ваш контейнер файлової системи. saveбуде пакувати шари та метадані всього ланцюга, необхідних для створення зображення. Потім ви можете завантажити цей savedланцюжок зображень " " в інший екземпляр докера та створити контейнери з цих зображень.
mbarthelemy

7
@ThomasUhrig Ви можете скористатися експортом, щоб "розрівняти" контейнер до одного шару / базового зображення. Також ви можете використовувати його для резервного копіювання контейнера (контейнера даних fe). Але це можна зробити і без exportфункції.
Іржі

9
Також exportвсі метадані будуть втрачені, тому у випадку, якщо ви спробуєте запустити контейнер із цим зображенням, ви будете перенаправляти CMD та інші метадані. saveдобре працював для мене, але експорт болів
Міраж

1
Я хочу оновити своє зображення до останньої версії. Контейнер, який зараз працює, вніс деякі зміни у внутрішню файлову систему. Після оновлення я хочу, щоб ці зміни були відновлені. Як я розумію, і збереження / завантаження, і експорт / імпорт створить для мене новий імідж, який не є тим, чого я хочу. Я хочу використовувати нову версію зображення з dockerhub, але відновити дані з існуючого контейнера. Який найкращий спосіб дії?
Дмитро z

20

Є дві основні відмінності між командами saveта exportкомандами.

  1. saveкоманда зберігає ціле зображення з історією та метаданими, але exportкоманда експортує лише структуру файлів (без історії та метаданих). Таким чином, експортований файл tar буде меншим, ніж збережений.

  2. При використанні експортованої файлової системи для створення нового образу , то цей новий образ не буде містити будь - яких USER, EXPOSE, і RUNт.д. команди з вашого Dockerfile. Передається лише структура файлів. Отже, коли ви використовуєте згадані ключові слова у своєму Dockerfile, тоді ви не можете використовувати команду експорту для передачі зображення на іншу машину - вам завжди потрібно використовувати команду save.


4

Експортоване зображення не буде збережено жодного шару чи історії історії, тому воно буде меншим, і ви не зможете відкатати.

Збережене зображення матиме інформацію про рівень та історію, настільки масштабну.

Якщо ви віддаєте це замовнику, Q - ви хочете зберегти ці шари чи ні?


Отже, експорт схожий на файл txt, на ньому нічого не написано правильно ?? @neil
AATHITH RAJENDRAN

4
це як текстовий файл без буфера для скасування 8)
Ніл Макгілл,

2

Технічно збереження / завантаження працює з сховищами, які можуть бути одним або декількома зображеннями, які також називаються шарами. Зображення - це один шар у межах репо. Нарешті, контейнер - це миттєве зображення (працює чи ні).


1

Docker save Зберігає файл tar-репо, який містить усі батьківські шари та всі теги + версії або вказаний тег repo: для кожного аргументу, наданого із зображення .

Експорт Docker Випускає вказаний файл (може бути дьоготь або tgz) з плоским вмістом без вмісту вказаних томів з контейнера .

Докер зберегти потрібно використовувати на зображенні докера під час експорту докера потрібно використовувати на контейнері (як і запущене зображення)

Зберегти використання

зберегти докер [OPTIONS] IMAGE [IMAGE ...]

Збережіть зображення (файли) в архіві смоли (передається в STDOUT за замовчуванням)

--help = помилкове використання друку -o, --output = "" Запишіть у файл замість STDOUT

Використання експорту

експорт докера [ВАРІАНТИ] КОНТЕЙНЕР

Експортуйте вміст файлової системи контейнера у вигляді архіву tar

--help = помилкове використання друку -o, --output = "" Запишіть у файл замість STDOUT


1
Питання про різницю між двома командами, а не про узагальнене визначення та використання!
Абу Шумон

0

export: container (filesystem)-> image tar.
import: exported image tar-> image. Лише один шар.

save: image-> image tar.
load: saved image tar-> image. Усі шари будуть відновлені.

Від Докера в дії, друге видання p190.

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

Згладжені зображення містять лише поточний набір файлів у файловій системі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.