Jaka jest różnica między zapisywaniem a eksportowaniem w Dockerze?

157

Bawię się Dockerem przez kilka dni i już zrobiłem kilka zdjęć (co było naprawdę zabawne!). Teraz chcę wytrwać w pracy i doszedłem do poleceń savei export, ale nie do końca je rozumiem.

Jaka jest różnica między saveiw exportDockerze?

Thomas Uhrig
źródło
4
Napisałem również wpis na blogu na ten temat pod adresem tuhrig.de/difference-between-save-and-export-in-docker
Thomas Uhrig

Odpowiedzi:

169

Krótka odpowiedź brzmi:

  • savepobierze obraz: dla maszyny wirtualnej lub serwera fizycznego będzie to obraz instalacyjny ISO lub dysk. Podstawowy system operacyjny.

    Spakuje warstwy i metadane z całego łańcucha wymaganego do zbudowania obrazu. Następnie można załadować ten „zapisany” łańcuch obrazów do innej instancji dockera i utworzyć kontenery z tych obrazów.

  • exportpobierze cały kontener: jak migawka zwykłej maszyny wirtualnej. Zapisuje oczywiście system operacyjny, ale także wszelkie wprowadzone zmiany, wszelkie pliki danych zapisane w trakcie życia kontenera. Ten bardziej przypomina tradycyjną kopię zapasową.

    To da ci płaskie archiwum .tar zawierające system plików twojego kontenera.

Edycja: ponieważ moje wyjaśnienie może nadal prowadzić do nieporozumień, myślę, że ważne jest, aby zrozumieć, że jedno z tych poleceń działa z kontenerami, a drugie działa z obrazami.

  • Obraz musi być uznane za „martwy” lub niezmienne, począwszy od 0 lub 1000 pojemniki z niej nie zmieni jednego bajta. Dlatego wcześniej dokonałem porównania z instalacją systemu ISO. Być może jest nawet bliżej płyty live-CD.

  • Pojemnik „buty” obraz i dodaje dodatkową warstwę na wierzchu. Ta warstwa przechowuje wszelkie zmiany w kontenerze (utworzone / zmienione / usunięte pliki ...).

mbarthelemy
źródło
2
Dla wyjaśnienia: załóżmy, że mam uruchomiony kontener, w którym dokonałem pewnych zmian (np. Utworzyłem nowy folder). Teraz mogę zrobić obraz tego kontenera (za pomocą docker commit). Mogę wtedy saveobraz. Albo mogę exportbezpośrednio pojemnik. I oba sposoby ( saveobraz i exportkontener) będą miały ten sam wynik?
Thomas Uhrig
2
Tak i nie. exportDaje płaską .tar archiwum zawierającego kontenera plików. savespakuje warstwy i metadane z całego łańcucha wymaganego do zbudowania obrazu. Następnie możesz załadować ten savedłańcuch obrazów do innej instancji Dockera i utworzyć kontenery z tych obrazów.
mbarthelemy
7
@ThomasUhrig Możesz użyć eksportu do "spłaszczenia" kontenera do jednej warstwy / obrazu podstawowego. Możesz również użyć go do wykonania kopii zapasowej kontenera (np. Kontenera danych). Ale można to zrobić również bez exportfunkcji.
Jiri
9
Ponadto exportwszystkie metadane zostaną utracone, więc w przypadku próby uruchomienia kontenera z tym obrazem należy wymienić CMD i inne metdane. savedziałało dobrze, ale eksport był bólem
Mirage
1
Chcę zaktualizować mój obraz do najnowszej wersji. Kontener, który jest teraz uruchomiony, wprowadził pewne zmiany w wewnętrznym systemie plików. Po uaktualnieniu chcę przywrócić te zmiany. Jak rozumiem, zarówno zapisywanie / ładowanie, jak i eksportowanie / importowanie utworzą dla mnie nowy obraz, co nie jest tym, czego chcę. Chcę użyć nowej wersji obrazu z dockerhub, ale przywrócić dane z istniejącego kontenera. Jaki jest najlepszy sposób działania?
Dmitry z
20

Istnieją dwie główne różnice między poleceniami savei export.

  1. savepolecenie zapisuje cały obraz z historią i metadanymi, ale exportpolecenie eksportuje tylko strukturę plików (bez historii i metadanych). Więc wyeksportowany plik tar będzie mniejszy niż zapisany.

  2. Podczas korzystania wyeksportowany system plików do tworzenia nowego wizerunku wtedy ten nowy obraz nie będzie zawierać żadnych USER, EXPOSE, RUNitd. Polecenia z Dockerfile. Przesłana zostanie tylko struktura plików. Więc jeśli używasz wspomnianych słów kluczowych w swoim pliku Dockerfile, nie możesz użyć polecenia eksportu do przeniesienia obrazu na inny komputer - zawsze musisz użyć polecenia save.

eNca
źródło
4

Eksportowany obraz nie będzie zawierał żadnych informacji o warstwie ani historii, więc będzie mniejszy i nie będzie można przywrócić.

Zapisany obraz będzie zawierał informacje o warstwie i historii, więc będzie większe.

Jeśli dajesz to klientowi, pytanie brzmi, czy chcesz zachować te warstwy, czy nie?

Neil McGill
źródło
więc eksport jest podobny do pliku txt i nic w nim nie jest zapisane, prawda? @neil
AATHITH RAJENDRAN
4
jest jak plik tekstowy bez bufora cofania 8)
Neil McGill,
2

Z technicznego punktu widzenia zapisywanie / ładowanie działa z repozytoriami, którymi może być jeden lub więcej obrazów, nazywanych również warstwami. Obraz to pojedyncza warstwa w repozytorium. Wreszcie kontener jest obrazem utworzonym (działa lub nie).

fatherlinux
źródło
1

Docker save Tworzy repozytorium plików tar, które zawiera wszystkie warstwy nadrzędne i wszystkie tagi + wersje lub określony repo: tag dla każdego argumentu dostarczonego z obrazu .

Eksport z platformy Docker Tworzy określony plik (może to być tar lub tgz) z płaską zawartością bez zawartości określonych woluminów z kontenera .

Docker save trzeba użyć na obrazie docker, podczas gdy eksport docker musi być użyty na kontenerze (tak jak uruchomiony obraz)

Oszczędzaj użycie

docker save [OPCJE] IMAGE [IMAGE ...]

Zapisz obraz (y) w archiwum tar (domyślnie przesyłane strumieniowo do STDOUT)

--help = false Wydrukuj użycie -o, --output = "" Zapisuje do pliku zamiast STDOUT

eksport Wykorzystanie

eksport docker [OPCJE] CONTAINER

Wyeksportuj zawartość systemu plików kontenera jako archiwum tar

--help = false Wydrukuj użycie -o, --output = "" Zapisuje do pliku zamiast STDOUT

Sachin Gade
źródło
1
Pytanie dotyczy różnicy między dwoma poleceniami, a nie uogólnionej definicji i użycia!
Abu Shumon
0

export: container (filesystem)-> image tar.
import: exported image tar-> image. Tylko jedna warstwa.

save: image-> image tar.
load: saved image tar-> image. Wszystkie warstwy zostaną odzyskane.

From Docker in Action, Second Edition p190.

Obrazy warstwowe zachowują historię obrazu, metadane tworzenia kontenerów i stare pliki, które mogły zostać usunięte lub nadpisane.

Spłaszczone obrazy zawierają tylko bieżący zestaw plików w systemie plików.

youngsend
źródło