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.
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 ...).
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.
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.
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.
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).
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
Odpowiedzi:
Krótka odpowiedź brzmi:
save
pobierze 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.
export
pobierze 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 ...).
źródło
docker commit
). Mogę wtedysave
obraz. Albo mogęexport
bezpośrednio pojemnik. I oba sposoby (save
obraz iexport
kontener) będą miały ten sam wynik?export
Daje płaską .tar archiwum zawierającego kontenera plików.save
spakuje warstwy i metadane z całego łańcucha wymaganego do zbudowania obrazu. Następnie możesz załadować tensaved
łańcuch obrazów do innej instancji Dockera i utworzyć kontenery z tych obrazów.export
funkcji.export
wszystkie metadane zostaną utracone, więc w przypadku próby uruchomienia kontenera z tym obrazem należy wymienić CMD i inne metdane.save
działało dobrze, ale eksport był bólemIstnieją dwie główne różnice między poleceniami
save
iexport
.save
polecenie zapisuje cały obraz z historią i metadanymi, aleexport
polecenie eksportuje tylko strukturę plików (bez historii i metadanych). Więc wyeksportowany plik tar będzie mniejszy niż zapisany.Podczas korzystania wyeksportowany system plików do tworzenia nowego wizerunku wtedy ten nowy obraz nie będzie zawierać żadnych
USER
,EXPOSE
,RUN
itd. 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.źródło
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?
źródło
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).
źródło
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
eksport Wykorzystanie
źródło
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.
źródło