Docker 이미지 백업과 복원 방법을 docker save, docker load 명령어 중심으로 정리합니다. 운영 서버 이전, 폐쇄망 배포, 이미지 보관 시 사용하는 tar 백업 파일 생성과 복원 절차를 실무 예제로 설명합니다.

Docker 이미지 백업과 복원 방법 정리: save, load, tar 파일로 이전하기
Docker 이미지 백업/복원은 운영 서버 이전, 폐쇄망 배포, 이미지 보관, 장애 대응 환경 구축에서 자주 사용하는 작업입니다. 이 글에서는 docker save, docker load 명령어를 사용해 Docker 이미지를 tar 파일로 백업하고, 다른 서버에서 복원하는 방법을 실무 기준으로 정리합니다.
Docker 이미지 백업이 필요한 상황
Docker 이미지는 보통 Docker Hub, 사설 Registry, GitHub Container Registry 같은 저장소에서 pull 받아 사용합니다. 하지만 실무에서는 항상 Registry를 사용할 수 있는 것은 아닙니다.
예를 들어 다음과 같은 상황에서는 Docker 이미지 백업 파일이 필요합니다.
| 서버 이전 | 기존 서버의 Docker 이미지를 새 서버로 옮겨야 하는 경우 |
| 폐쇄망 배포 | 인터넷이 안 되는 서버에 이미지를 배포해야 하는 경우 |
| 장애 대비 | 특정 버전의 이미지를 tar 파일로 보관해야 하는 경우 |
| Registry 미사용 | 별도 Docker Registry 없이 이미지 파일만 전달해야 하는 경우 |
| 배포 이력 보관 | 운영에 사용한 이미지를 버전별로 보관해야 하는 경우 |
Docker 이미지는 컨테이너와 다릅니다. 이미지는 실행 전 패키지이고, 컨테이너는 이미지를 실행한 인스턴스입니다. 따라서 이미지 백업은 실행 중인 데이터나 볼륨 데이터까지 포함하지 않습니다.
현재 Docker 이미지 목록 확인
먼저 서버에 어떤 Docker 이미지가 있는지 확인합니다.
docker images
예시 결과입니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
my-app latest a1b2c3d4e5f6 2 days ago 350MB
nginx 1.25 605c77e624dd 3 weeks ago 187MB
mysql 8.0 3218b38490ce 1 month ago 600MB
백업할 때는 REPOSITORY:TAG 형식으로 지정하는 것이 좋습니다.
예를 들어 my-app:latest 이미지를 백업하려면 다음처럼 사용합니다.
Docker 이미지 백업 방법
Docker 이미지를 tar 파일로 백업할 때는 docker save 명령어를 사용합니다.
docker save -o my-app-latest.tar my-app:latest
명령어 구조는 다음과 같습니다.
docker save -o [백업파일명.tar] [이미지명:태그]
예시입니다.
docker save -o nginx-1.25.tar nginx:1.25
백업 파일이 생성되었는지 확인합니다.
ls -lh
결과 예시입니다.
-rw------- 1 root root 187M May 21 10:30 nginx-1.25.tar
여러 Docker 이미지를 한 번에 백업하기
여러 이미지를 하나의 tar 파일로 묶어서 백업할 수도 있습니다.
docker save -o docker-images-backup.tar nginx:1.25 mysql:8.0 my-app:latest
이 방식은 특정 서비스에 필요한 이미지를 한 번에 옮길 때 편리합니다.
다만 이미지 용량이 클 경우 tar 파일 크기도 커지므로 서버 디스크 용량을 먼저 확인해야 합니다.
df -h
Docker 이미지 백업 파일 압축하기
Docker 이미지 tar 파일은 용량이 큰 경우가 많습니다. 서버 간 전송이 필요하다면 gzip으로 압축하는 것이 좋습니다.
gzip my-app-latest.tar
압축 후 파일명은 다음처럼 변경됩니다.
my-app-latest.tar.gz
압축된 파일을 복원할 때는 먼저 압축을 해제합니다.
gunzip my-app-latest.tar.gz
또는 압축 해제와 Docker 이미지 로드를 한 번에 처리할 수도 있습니다.
gunzip -c my-app-latest.tar.gz | docker load
Docker 이미지 복원 방법
Docker 이미지 복원은 docker load 명령어를 사용합니다.
docker load -i my-app-latest.tar
명령어 구조는 다음과 같습니다.
docker load -i [백업파일명.tar]
복원이 완료되면 다음과 같은 메시지가 출력됩니다.
Loaded image: my-app:latest
복원된 이미지 목록을 확인합니다.
docker images
다른 서버로 Docker 이미지 옮기기
Docker 이미지 백업 파일을 다른 서버로 옮길 때는 scp를 많이 사용합니다.
scp my-app-latest.tar user@192.168.0.20:/home/user/
새 서버에 접속합니다.
ssh user@192.168.0.20
Docker 이미지를 복원합니다.
docker load -i /home/user/my-app-latest.tar
복원 후 컨테이너를 실행합니다.
docker run -d --name my-app -p 8080:8080 my-app:latest
Docker 이미지 백업과 컨테이너 백업의 차이
Docker 이미지 백업과 컨테이너 백업은 목적이 다릅니다.
| 이미지 백업 | docker save | 이미지 레이어, 태그 정보 |
| 이미지 복원 | docker load | 이미지 재등록 |
| 컨테이너 파일시스템 백업 | docker export | 컨테이너 파일시스템 |
| 컨테이너 복원 | docker import | 이미지로 가져오기 |
일반적으로 운영 배포용 이미지를 옮길 때는 docker save와 docker load를 사용합니다.
반면 실행 중인 컨테이너 내부의 변경 사항을 파일시스템 기준으로 저장하려면 docker export를 사용합니다. 하지만 이 방식은 이미지 히스토리나 메타데이터가 유지되지 않기 때문에 일반적인 이미지 백업에는 권장되지 않습니다.
Docker save와 export 차이
많이 헷갈리는 부분이 docker save와 docker export입니다.
docker save -o image.tar my-app:latest
docker save는 Docker 이미지를 백업합니다.
docker export -o container.tar my-container
docker export는 컨테이너의 파일시스템을 백업합니다.
정리하면 다음과 같습니다.
| docker save | 이미지 | 이미지 백업, 서버 이전, 폐쇄망 배포 |
| docker load | 이미지 tar 파일 | 이미지 복원 |
| docker export | 컨테이너 | 컨테이너 파일시스템 추출 |
| docker import | export tar 파일 | 새 이미지 생성 |
운영 배포 이미지 백업 목적이라면 대부분 docker save를 사용하면 됩니다.
Docker 이미지 백업 자동화 스크립트 예제
운영 서버에서는 매번 명령어를 직접 입력하기보다 날짜별로 백업 파일을 생성하는 스크립트를 만들어두면 편리합니다.
#!/bin/bash
IMAGE_NAME="my-app"
IMAGE_TAG="latest"
BACKUP_DIR="/backup/docker-images"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
docker save -o "$BACKUP_DIR/${IMAGE_NAME}_${IMAGE_TAG}_${DATE}.tar" "${IMAGE_NAME}:${IMAGE_TAG}"
gzip "$BACKUP_DIR/${IMAGE_NAME}_${IMAGE_TAG}_${DATE}.tar"
echo "Docker image backup completed:"
echo "$BACKUP_DIR/${IMAGE_NAME}_${IMAGE_TAG}_${DATE}.tar.gz"
파일명을 docker-image-backup.sh로 저장합니다.
vi docker-image-backup.sh
실행 권한을 부여합니다.
chmod +x docker-image-backup.sh
스크립트를 실행합니다.
./docker-image-backup.sh
Docker 이미지 복원 자동화 스크립트 예제
압축된 Docker 이미지 백업 파일을 복원하는 스크립트는 다음과 같이 작성할 수 있습니다.
#!/bin/bash
BACKUP_FILE="$1"
if [ -z "$BACKUP_FILE" ]; then
echo "Usage: $0 [docker-image.tar.gz]"
exit 1
fi
if [ ! -f "$BACKUP_FILE" ]; then
echo "File not found: $BACKUP_FILE"
exit 1
fi
gunzip -c "$BACKUP_FILE" | docker load
echo "Docker image restore completed."
docker images
실행 예시입니다.
chmod +x docker-image-restore.sh
./docker-image-restore.sh my-app_latest_20260521_103000.tar.gz
Docker Compose 환경에서 이미지 백업하기
Docker Compose를 사용하는 경우 먼저 어떤 이미지가 사용 중인지 확인해야 합니다.
docker compose images
또는 docker-compose.yml 파일에서 image 항목을 확인합니다.
services:
app:
image: my-app:latest
ports:
- "8080:8080"
nginx:
image: nginx:1.25
ports:
- "80:80"
위 구성이라면 다음처럼 백업할 수 있습니다.
docker save -o compose-images.tar my-app:latest nginx:1.25
복원 서버에서는 다음 명령어를 실행합니다.
docker load -i compose-images.tar
docker compose up -d
Docker 이미지 백업 시 주의할 점
Docker 이미지 백업을 할 때는 다음 내용을 확인해야 합니다.
첫째, Docker 이미지는 볼륨 데이터를 포함하지 않습니다. MySQL, PostgreSQL, Redis 같은 데이터 저장소를 컨테이너로 운영 중이라면 반드시 볼륨 백업을 별도로 해야 합니다.
예를 들어 MySQL 데이터를 Docker volume으로 사용 중이라면 이미지 백업만으로는 데이터가 복구되지 않습니다.
docker volume ls
둘째, 이미지 태그를 명확하게 관리해야 합니다. latest 태그만 사용하면 어떤 시점의 이미지인지 추적하기 어렵습니다.
운영에서는 다음처럼 버전 태그를 함께 사용하는 것이 좋습니다.
my-app:2026.05.21
my-app:v1.3.0
my-app:release-20260521
셋째, 백업 파일은 서버 외부에도 보관하는 것이 좋습니다. 같은 서버에만 백업 파일을 두면 디스크 장애가 발생했을 때 함께 손실될 수 있습니다.
자주 발생하는 오류
no space left on device
Docker 이미지를 백업하거나 복원할 때 디스크 공간이 부족하면 다음 오류가 발생할 수 있습니다.
no space left on device
디스크 용량을 확인합니다.
df -h
Docker가 사용하는 용량도 확인합니다.
docker system df
사용하지 않는 이미지와 컨테이너를 정리할 수 있습니다.
docker system prune -a
다만 이 명령어는 사용하지 않는 이미지까지 삭제할 수 있으므로 운영 서버에서는 신중하게 실행해야 합니다.
requested access to the resource is denied
이미지를 pull하거나 push할 때 발생하는 오류이지만, 백업/복원 후 Registry에 다시 올리는 과정에서도 자주 보입니다.
requested access to the resource is denied
이 경우 Docker Registry 로그인 여부와 이미지 태그를 확인해야 합니다.
docker login
docker tag my-app:latest registry.example.com/my-app:latest
docker push registry.example.com/my-app:latest
FAQ
Docker 이미지 백업 파일에 컨테이너 데이터도 포함되나요?
포함되지 않습니다. docker save는 Docker 이미지 백업 명령어입니다. 컨테이너 실행 중 생성된 데이터, Docker volume, 데이터베이스 파일은 별도로 백업해야 합니다.
Docker 이미지를 다른 서버로 옮기려면 Registry가 꼭 필요한가요?
아닙니다. docker save로 tar 파일을 만들고 scp, rsync, USB, 내부망 파일 서버 등을 통해 전달한 뒤 docker load로 복원할 수 있습니다.
docker save와 docker export 중 어떤 것을 써야 하나요?
이미지를 백업하고 다른 서버에서 동일하게 실행하려면 docker save를 사용합니다. 컨테이너 파일시스템 자체를 추출하려면 docker export를 사용합니다.
Docker 이미지 백업 파일은 압축해도 되나요?
가능합니다. gzip으로 압축해도 되고, 복원할 때는 gunzip -c backup.tar.gz | docker load 방식으로 바로 로드할 수 있습니다.
마무리
Docker 이미지 백업/복원은 docker save와 docker load만 정확히 이해하면 어렵지 않습니다. 운영 서버 이전, 폐쇄망 배포, 장애 대비 이미지 보관이 필요하다면 이미지를 tar 파일로 백업하고, 복원 서버에서 docker load로 다시 등록하면 됩니다.
다만 Docker 이미지 백업은 컨테이너 데이터나 볼륨 데이터를 포함하지 않으므로, 데이터베이스나 업로드 파일이 있는 서비스라면 볼륨 백업까지 함께 설계해야 합니다.
추천 태그
Docker,Docker 이미지 백업,Docker 이미지 복원,docker save,docker load,Docker tar 백업,Docker 서버 이전,Docker 폐쇄망 배포,Docker Compose,Docker 운영
'서버 & 인프라' 카테고리의 다른 글
| Ubuntu 22.04 LVM 디스크 용량 확장 방법 (100GB → 3.6TB 적용 사례) (0) | 2026.06.01 |
|---|---|
| Ubuntu 22.04 개발 서버 구축기 - Apache, PHP, MySQL, GitLab, Nexus, vLLM 포털 구성 및 트러블슈팅 (0) | 2026.06.01 |
| Ubuntu 22.04 Nexus Repository 3.92.3 설치 및 데이터 복원 (0) | 2026.06.01 |
| Docker Compose 로컬 개발환경 구축 방법: Spring Boot, MySQL, Redis 예제로 이해하기 (0) | 2026.06.01 |
| Ubuntu Apache PHP 사이트 배포 시 403 Forbidden, 500 Internal Server Error 해결 방법 (0) | 2026.06.01 |
