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는 순수 파일만 담기 때문에 레이어/캐시 제외 → 용량 감소

'Docker(도커)' 카테고리의 다른 글
| 도커 이미지 저장 및 로드 (0) | 2024.12.12 |
|---|---|
| 도커 실습연습(wordpress 사이트를 docker로 구축) (1) | 2023.06.29 |
| 도커(3일차) (0) | 2023.06.29 |
| 도커(2일차) (2) | 2023.06.27 |
| 도커(1일자) (0) | 2023.06.26 |