Docker(도커)

Docker 이미지와 컨테이너 백업/복원 정리

세용용용용 2025. 12. 18. 13:51
docker를 사용하다 보면 컨테이너와 이미지를 백업하거나 다른 서버로 옮길 일이 많습니다. 
그 과정에서 헷갈리기 쉬운 commit, save/load, export/import 차이를 초보자 시선에서 정리해보겠습니다!

 

1) Docker 커밋 ( docker commit )

항목 설명
목적 실행 중인 컨테이너를 → 이미지로 저장
사용 시점 컨테이너에서 설치/설정 작업 후
생성 결과 새로운 이미지
특징 컨테이너 상태 그대로 이미지 생성 가능
명령어 docker commit [컨테이너 명] [이미지 명]:[태그]
  • 컨테이너에서 설치한 패키지나 설정을 그래도 이미지로 저장
  • 이후 docker run test:v1 으로 동일 환경 재사용 가능

 

2) Docker Save / Load ( docker save / docker load )

항목 설명
목적 이미지를 파일로 저장, 불러오기
사용 시점 이미지 백업
생성 결과 ~.tar 파일 → load 후 새 이미지 생성
특징 이미지 전체(레이어 + 히스토리 + 설정) 포함
명령어 docker save -o [tar 파일명] [이미지 명]  파일로 저장
docker load -i [tar 파일명] 이미지 불러오기
  • tar 파일 크기 = 이미지 전체 크기 → 상대적으로 큼 ( 레이어 + 히스토리 포함 )

 

3) Docker Export / Import ( docker export / docker import )

항목 설명
목적 컨테이너 파일 시스템만 내보내기/불러오기
사용 시점 컨테이너 내부 파일만 백업
생성 결과 ~.tar 파일 → import 후 새 이미지 생성
특징 - Dockerfile 정보 없음
- 레이어/히스토리 없음
- CMD/ENV 등 설정 사라짐
명령어 docker export [컨테이너 명] -o [tar 파일명]  파일로 저장
docker import [tar 파일명] [이미지 명]
  • 컨테이너 안 파일만 백업하고 싶을 때 사용
  • 이미지 히스토리와 설정은 손실됨 → 용량 절약 가능 ( 레이어 + 히스토리 미포함 )

 

4) 차이점 한번에 비교

명령어 타입 대상 결과 특징
docker commit 이미지 컨테이너 이미지 컨테이너 상태 그대로 이미지 생성
docker save/load 이미지 이미지 ~.tar → 이미지 레이어 + 히스토리 + 설정 포함, 완전 백업/복원
docker export/import 컨테이너 컨테이너 ~.tar → 이미지 파일 시스템만, 레이어/설정 정보 없음
  • 용량 절약이 목적이면 docker export/import 추천
  • 완전 백업이나 재현 가능한 이미지가 필요하면 docker save/load 추천
  • 컨테이너 상태 그대로 빠르게 이미지로 만들고 싶으면 docker commit

1) Docker 이미지 레이어 + 캐시

[ 이미지 레이어란? ]

  • Docker 이미지는 여러 층으로 쌓여서 만들어짐
  • 각 명령어(RUN, COPY, ADD..) 등등.. 마다 레이어 생성
  • 레이어 덕분에 중복 최소화, 빠른 빌드, 재사용 가능 ( 장점 )
FROM ubuntu:22.04          # Layer 1: 베이스 OS
RUN apt-get update         # Layer 2: 패키지 설치
COPY app /app              # Layer 3: 애플리케이션 복사
RUN pip install -r req.txt # Layer 4: Python 라이브러리 설치

>> 이미지 = Layer 1 + Layer 2 + Layer 3 + Layer 4

 

[ 운영환경에서 발생할 수 있는 문제 ]

  • 컨테이너 빌드와 배포가 반복되면 사용하지 않는 레이어가 계속 쌓임
  • 디스크 공간 낭비 발생 → 이미지 크기 증가
  • 결국.. 배포 효율 저하 및 관리 어려움

 

[ 해결 방안 : export 활용 ]

  • docker export 사용 시:
    • 컨테이너의 파일 시스템만 내보냄
    • 레이어와 히스토리 제거 → 불필요한 공간 감소
    • 배포용 이미지 용량 절약 가능

핵심: 운영환경에서 이미 빌드와 설치가 끝난 컨테이너를 그대로 배포하고 싶을 때, export → import로 이미지 만들면 레이어 캐시와 히스토리로 인한 디스크 낭비를 줄일 수 있음!!

 

 

2) 캐시

[ 캐시 란? ]

  • Docker는 빌드 속도를 위해 이미 만들어진 레이어 재사용
  • 이미 빌드된 레이어가 있으면 다시 실행하지 않고 캐시 사용
  • 옵션: docker build --no-cache → 캐시 무시하고 새로 빌드
RUN apt-get update
RUN apt-get install -y python3

>> 이미 apt-get update 레이어가 있으면 캐시된 레이어 사용 → 빠른 빌드

 

 

 

3) layer + cache 가 사이즈에 미치는 영향

명령어 내용파일 크기
docker save 레이어 + 캐시 + 설정 포함 상대적으로 큼 (예: 140GB)
docker export 컨테이너 파일 시스템만 작음 (예: 28GB)
  • 레이어 = 이미지 명령어 단위로 쌓인 조각
  • 캐시 = 이미 만들어진 레이어 재사용 저장 공간
  • export는 순수 파일만 담기 때문에 레이어/캐시 제외 → 용량 감소

실제 사이즈 비교,, ㄷㄷ