Docker에서 저장과 내보내기의 차이점은 무엇입니까?


답변:


169

짧은 대답은 다음과 같습니다.

  • saveVM 또는 실제 서버의 경우 이미지를 가져옵니다. 이는 설치 .ISO 이미지 또는 디스크입니다. 기본 운영 체제

    이미지를 만드는 데 필요한 모든 체인의 레이어와 메타 데이터를 압축합니다. 그런 다음이 "저장된"이미지 체인을 다른 도커 인스턴스에로드하고이 이미지에서 컨테이너를 만들 수 있습니다.

  • export일반 컨테이너의 스냅 샷처럼 전체 컨테이너를 가져옵니다. 물론 컨테이너 수명 동안 작성된 모든 데이터 파일뿐만 아니라 OS를 저장합니다. 이것은 전통적인 백업과 비슷합니다.

    컨테이너의 파일 시스템을 포함하는 플랫 .tar 아카이브를 제공합니다.

편집 : 내 설명이 여전히 혼란을 초래할 수 있으므로 이러한 명령 중 하나는 컨테이너와 작동하고 다른 명령은 이미지와 작동한다는 것을 이해하는 것이 중요하다고 생각합니다.

  • 이미지는 단일 바이트를 변경하지 않을 것이 0 1000 용기 시작 "죽은"또는 불변으로 간주되어야한다. 그렇기 때문에 시스템 설치 ISO와 비교해 보았습니다. 라이브 CD에 더 가깝습니다.

  • 컨테이너 "시동"이미지 및 그 위에 추가의 층을 추가한다. 이 레이어는 컨테이너의 모든 변경 사항을 생성합니다 (생성 / 변경 / 제거 된 파일 ...)


2
설명을 위해 : 일부 변경을 수행 한 실행중인 컨테이너가 있다고 가정합니다 (예 : 새 폴더를 만든 경우). 이제이 컨테이너의 이미지를 만들 수 있습니다 (with docker commit). 그런 다음 save이미지를 볼 수 있습니다 . 또는 export컨테이너를 직접 할 수 있습니다. 그리고 두 가지 방법 ( save이미지와 export컨테이너)이 동일한 결과를 얻습니까?
Thomas Uhrig

2
예, 아니오 그러면 export컨테이너 파일 시스템이 포함 된 플랫 .tar 아카이브가 제공됩니다. save이미지를 만드는 데 필요한 모든 체인의 레이어와 메타 데이터를 압축합니다. 그런 다음이 " saved"이미지 체인을 다른 도커 인스턴스에 로드하고이 이미지에서 컨테이너를 만들 수 있습니다.
mbarthelemy

7
@ThomasUhrig 내보내기를 사용하여 컨테이너를 하나의 레이어 / 기본 이미지로 "평평하게"만들 수 있습니다. 또한 컨테이너 (fe 데이터 컨테이너)를 백업하는 데 사용할 수 있습니다. 그러나 이것은 export기능 없이 수행 될 수 있습니다 .
Jiri

9
또한 export모든 메타 데이터가 손실되므로 해당 이미지로 컨테이너를 실행하려고하면 CMD 및 기타 metdata가 리 멘션됩니다. save나를 위해 잘 일했지만 수출은 고통이었다
Mirage

1
이미지를 최신 버전으로 업데이트하고 싶습니다. 실행중인 컨테이너가 내부 파일 시스템을 일부 변경했습니다. 업그레이드 후 이러한 변경 사항을 복원하고 싶습니다. 내가 이해하는 것처럼, 저장 /로드 및 내보내기 / 가져 오기는 나를 위해 새로운 이미지를 만들 것입니다. dockerhub의 새로운 이미지 버전을 사용하고 싶지만 기존 컨테이너에서 데이터를 복원하고 싶습니다. 최선의 행동 과정은 무엇입니까?
Dmitry z

20

saveexport명령 사이에는 두 가지 주요 차이점이 있습니다 .

  1. save명령은 전체 이미지를 기록 및 메타 데이터와 함께 저장하지만 export명령은 파일 구조 만 기록합니다 (기록 및 메타 데이터 제외). 따라서 내 보낸 tar 파일은 저장된 것보다 작습니다.

  2. 새 이미지를 만들기 위해 내 보낸 파일 시스템을 사용하는 경우 다음이 새로운 이미지는 포함되지 않습니다 USER, EXPOSE, RUN당신 Dockerfile 등에서 명령을. 파일 구조 만 전송됩니다. 따라서 Dockerfile에서 언급 된 키워드를 사용하는 경우 이미지를 다른 시스템으로 전송하기 위해 내보내기 명령을 사용할 수 없습니다. 항상 save 명령을 사용해야합니다.


4

내 보낸 이미지에는 레이어 또는 기록 정보가 저장되지 않으므로 크기가 더 작아서 롤백 할 수 없습니다.

저장된 이미지는 것이다 층 및 이력 정보를, 그래서 더 큰 있습니다.

이것을 고객에게 제공하는 경우 Q는 해당 계층을 유지 하시겠습니까?


따라서 내보내기는 txt 파일과 비슷하지만 아무것도 쓰여 있지 않습니다. @neil
AATHITH RAJENDRAN

4
실행 취소 버퍼가없는 텍스트 파일과 같습니다. 8)
Neil McGill

2

기술적으로 저장 /로드는 레이어라고도하는 하나 이상의 이미지 일 수있는 리포지토리와 함께 작동합니다. 이미지는 리포지토리 내의 단일 레이어입니다. 마지막으로 컨테이너는 인스턴스화 된 이미지입니다 (실행 중이거나 실행되지 않음).


1

Docker save 이미지 에서 제공된 각 인수에 대해 모든 상위 계층과 모든 태그 + 버전 또는 지정된 repo : tag를 포함하는 tar 파일 저장소를 생성합니다. 합니다.

도커 내보내기 컨테이너 에서 지정된 볼륨의 내용이없는 플랫 내용으로 지정된 파일 (tar 또는 tgz 일 수 있음)을 생성합니다. .

도커 save 는 docker 이미지에서 사용해야하지만 docker export 는 컨테이너에서 사용해야합니다 (실행중인 이미지와 동일)

사용량 저장

도커 저장 [옵션] 이미지 [이미지 ...]

tar 아카이브에 이미지 저장 (기본적으로 STDOUT으로 스트리밍 됨)

--help = false 인쇄 사용법 -o, --output = ""STDOUT 대신 파일에 쓰기

수출 사용법

도커 내보내기 [옵션] 컨테이너

컨테이너 파일 시스템의 내용을 tar 아카이브로 내보내기

--help = false 인쇄 사용법 -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.

계층화 된 이미지는 이미지 기록, 컨테이너 생성 메타 데이터 및 삭제되었거나 재정의 된 이전 파일을 유지합니다.

병합 된 이미지에는 파일 시스템의 현재 파일 세트 만 포함됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.