docker image save

docker image save

하나 이상의 이미지를 tar 아카이브로 저장하는 명령이에요. 기본적으로 STDOUT으로 스트리밍해요. 이미지를 백업하거나 다른 환경으로 옮길 때 사용해요. 별칭으로 docker save를 쓸 수 있어요.

출처: 문서

본문

docker image save는 표준 출력 스트림으로 tar 처리된 저장소를 만들어요. 제공된 각 인자에 대해 모든 부모 레이어와 모든 태그·버전(또는 지정한 repo:tag)을 포함해요.

docker image save [OPTIONS] IMAGE [IMAGE...]

지원하는 옵션은 다음과 같아요.

옵션 기본값 설명
-o, --output STDOUT 대신 파일에 써요
--platform API 1.48+ 주어진 플랫폼만 저장. os[/arch[/variant]]의 쉼표 구분 목록 형식 (예: linux/amd64,linux/arm64/v8)

docker load와 함께 쓸 백업 만들기

$ docker save busybox > busybox.tar

$ ls -sh busybox.tar

2.7M busybox.tar

$ docker save --output busybox.tar busybox

$ ls -sh busybox.tar

2.7M busybox.tar

$ docker save -o fedora-all.tar fedora

$ docker save -o fedora-latest.tar fedora:latest

gzip으로 tar.gz 파일에 이미지 저장

gzip으로 이미지 파일을 압축해 백업을 더 작게 만들 수 있어요.

$ docker save myimage:latest | gzip > myimage_latest.tar.gz

특정 태그만 골라내기

이미지 저장소의 특정 태그만 골라낼 수도 있어요.

$ docker save -o ubuntu.tar ubuntu:lucid ubuntu:saucy

특정 플랫폼 저장 (--platform)

--platform 옵션은 이미지의 어떤 플랫폼 변형을 저장할지 지정해요. 기본적으로 docker save는 데몬의 이미지 저장소에 있는 모든 플랫폼 변형을 저장해요. --platform 옵션으로 이미지의 어떤 플랫폼 변형을 저장할지 정할 수 있어요. 주어진 플랫폼이 로컬 이미지 저장소에 없으면 오류가 발생해요.

플랫폼 옵션은 os[/arch[/variant]] 형식을 취해요. 예를 들어 linux/amd64 또는 linux/arm64/v8이에요. 아키텍처와 변형은 선택 사항이고, 생략하면 데몬 네이티브 아키텍처로 기본값을 정해요.

다음 예제는 alpine:latest 이미지의 RISC-V 변형을 풀해서 tar 아카이브로 저장해요.

$ docker pull --platform=linux/riscv64 alpine:latest
latest: Pulling from library/alpine
8c4a05189a5f: Download complete
Digest: sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

$ docker image save --platform=linux/riscv64 -o alpine-riscv.tar alpine:latest

$ ls -lh image.tar
-rw-------  1 thajeztah  staff   3.9M Oct  7 11:06 alpine-riscv.tar

다음 예제는 로컬 이미지 저장소에 존재하지 않는 alpine:latest의 플랫폼 변형을 저장하려 해서 오류가 나는 상황이에요.

$ docker image ls --tree
IMAGE                   ID             DISK USAGE   CONTENT SIZE   IN USE
alpine:latest           beefdbd8a1da       10.6MB         3.37MB
├─ linux/riscv64        80cde017a105       10.6MB         3.37MB
├─ linux/amd64          33735bd63cf8           0B             0B
├─ linux/arm/v6         50f635c8b04d           0B             0B
├─ linux/arm/v7         f2f82d424957           0B             0B
├─ linux/arm64/v8       9cee2b382fe2           0B             0B
├─ linux/386            b3e87f642f5c           0B             0B
├─ linux/ppc64le        c7a6800e3dc5           0B             0B
└─ linux/s390x          2b5b26e09ca2           0B             0B

$ docker image save --platform=linux/s390x -o alpine-s390x.tar alpine:latest
Error response from daemon: no suitable export target found for platform linux/s390x

더 알아보기