docker commit
도커는 일반적으로 build, commit 명령으로 만든 이미지를 저장소에 업로드하고, 업로드한 이미지를 내려받아 사용한다.
다만 간혹 저장소를 거치지 않고 도커 이미지를 옮겨야 할 때가 존재하는데, 이 경우에는 도커 이미지와 컨테이너를 tar 형식으로 저장할 수 있다.
도커 이미지를 tar로 저장
도커 이미지를 tar 형식으로 저장한다. save 시 도커 이미지 태그를 지정하지 않으면, 이름이 같고 태그가 다른 모든 이미지를 저장한다.
docker save [OPTIONS] IMAGE [IMAGE...]
# -o : --output. 표준 출력 대신 파일로 저장한다.
# 예시
docker save ubuntu -o ubuntu.tar
또는 아래와 같이 파일 리다이렉션으로도 실행할 수 있다.
docker save <IMAGE> > <FILE.tar>
docker save busybox > busybox.tar
tar 파일을 docker image로 변환
docker save 명령으로 tar 형식으로 저장한 도커 이미지 파일을 컨테이너로 실행할 수 있는 이미지로 로드한다.
docker load [OPTIONS]
# -i : --input. 로드할 tar 파일 지정
# 예시
docker load -i docker/ubuntu.tar
또는 save와 마찬가지로 파일 리다이렉션으로 로드할 파일을 지정할 수 있다.
docker load < busybox.tar.gz
컨테이너를 tar로 저장
도커 컨테이너를 tar 형식으로 저장한다. 단, 컨테이너와 연결된 볼륨의 내용을 내보내지는 않는다.
docker export [OPTIONS] CONTAINER
# -o : --output. 표준 출력 대신 파일로 저장
# 예시
docker export 350c0e3dc224 -o nginx.tar
-o 옵션 대신 파일 리다이렉션을 이용해 내보낼 수도 있다.
docker export red_panda > latest.tar
export 한 tar 파일을 docker image로 변환
export로 내보낸 컨테이너 tar를 도커 컨테이너로 실행할 수 있는 image로 변환한다. URL 또는 표준 입력에서 데이터를 직접 가져오도록 - 지정할 수 있다.
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
# 예시
docker import https://example.com/exampleimage.tgz
cat exampleimage.tgz | docker import - exampleimagelocal:new
docker import docker/nginx.tar ubuntu:custom-1
root 권한으로 실행하지 않으면, 권한이 없는 파일이 포함되지 않을 수 있어 주의해야 한다.
참고 문서
https://docs.docker.com/engine/reference/commandline/save/
https://docs.docker.com/engine/reference/commandline/load/
https://docs.docker.com/engine/reference/commandline/export/
https://docs.docker.com/engine/reference/commandline/import/