Quick Flow
# image와 tag를 tar archive로 저장
docker image save --output my-app.tar myorg/my-app:1.2.3
# 다른 머신에서 image와 tag를 복원
docker image load --input my-app.tar
# 복원 tag와 실제 실행 확인
docker image inspect myorg/my-app:1.2.3 --format '{{json .RepoTags}}'
docker run --rm myorg/my-app:1.2.3 --version| 목적 | 맞는 명령 | archive에 남지 않는 것 |
|---|---|---|
| image layer와 tag 이동 | docker image save / docker image load | container, volume data, registry 권한 |
| container 파일시스템만 추출 | docker export | image layer history와 기본 실행 설정 |
| root filesystem tar를 새 image로 생성 | docker import | 원본 image metadata와 build history |
save는 image와 tag를 tar로 내보내고, load는 그 tar의 image와 tag를 로컬 image store에 복원합니다. image 이동과 데이터 백업은 다른 문제입니다.
save와 load
save/load는 image 단위 이동이다
docker image save는 지정한 image의 layer, 설정, tag를 tar archive로 묶습니다. 인터넷이 막힌 환경, 폐쇄망 전달, registry 접근이 어려운 임시 검증 환경에서 image를 파일로 넘길 때 사용할 수 있습니다. 반대편에서는 docker image load로 로컬 image store에 다시 등록합니다.
docker image save --output api-1.2.3.tar registry.example.com/api:1.2.3
scp api-1.2.3.tar deploy@server:/tmp/
ssh deploy@server "docker image load --input /tmp/api-1.2.3.tar"여러 image와 tag를 한 archive에 담을 수 있습니다. 동일한 image가 1.2.3과 stable tag를 모두 갖는다면 필요한 tag를 모두 지정해 전달합니다. load는 archive에 들어 있던 image와 tag를 복원합니다.
docker image save --output api.tar \
registry.example.com/api:1.2.3 \
registry.example.com/api:stabledocker image load는 gzip, bzip2, xz, zstd로 압축한 tar도 file 또는 표준 입력에서 읽을 수 있습니다. archive를 만드는 host와 받는 host의 Docker 버전·지원 플랫폼을 함께 확인합니다.
export와 import
docker export는 실행 중이거나 중지된 container의 파일시스템을 tar로 내보냅니다. image의 layer history, tag, Dockerfile 단계, 기본 CMD 같은 image 설정을 보존하는 흐름이 아닙니다. docker import로 다시 image처럼 만들 수는 있지만, 정상적인 image 배포보다는 디버깅이나 파일시스템 snapshot에 가깝습니다.
docker container export old-container --output rootfs.tar
docker image import rootfs.tar my-debug-image:flat이미지를 다른 머신에 그대로 옮기는 목적이면 save/load가 맞습니다. container 내부에서 수동으로 바꾼 파일 상태를 납작한 root filesystem으로 뽑아야 하는 특수 상황에서만 export/import를 검토합니다. mounted volume 위의 데이터는 docker export에도 포함되지 않으므로 volume은 별도 백업 흐름이 필요합니다.
전달 검증
반복 배포에는 접근 제어, tag 정책, digest 추적을 제공하는 private registry가 더 적합합니다. archive는 파일 자체가 바뀌지 않았는지 checksum으로 확인하고, 원본의 image reference·pull 또는 push 때 받은 digest·대상 플랫폼을 별도 릴리스 기록에 남깁니다. docker image load 뒤에는 registry digest가 로컬에 항상 다시 나타난다고 가정하지 말고, 복원된 tag와 실제 실행을 확인합니다.
# 송신 측: 전달 파일의 checksum을 별도 전달
docker image save --output api-1.2.3.tar registry.example.com/api:1.2.3
sha256sum api-1.2.3.tar > api-1.2.3.tar.sha256
# 수신 측: 파일과 image를 각각 확인
sha256sum --check api-1.2.3.tar.sha256
docker image load --input api-1.2.3.tar
docker image inspect registry.example.com/api:1.2.3 --format '{{json .RepoTags}}'멀티 플랫폼 archive에는 여러 변형이 들어 있을 수 있습니다. Docker API 1.48 이상에서는 docker image load --platform=linux/amd64처럼 archive 안의 특정 변형만 load할 수 있으며, 해당 변형이 없으면 오류가 납니다. 대상 host와 archive에 들어 있는 플랫폼을 전달 전에 맞춥니다.
docker export는 image 배포용 백업이 아닙니다. layer와 image 설정이 보존되지 않으며, save/load도 container의 writable layer와 volume 데이터를 백업하지 않습니다. 배포 image와 영속 데이터의 전달 절차를 분리하십시오.
참고 링크
3 sources