Docker를 사용하다 보면 실행 중인 컨테이너를 그대로 백업하거나 다른 서버로 옮겨야 하는 상황이 자주 발생합니다. 테스트 환경에서 구성한 컨테이너를 운영 서버로 이전하거나, 인터넷이 연결되지 않은 내부망으로 컨테이너를 전달해야 하는 경우도 있습니다. 이러한 작업을 위해 Docker에서는 docker export와 docker import 명령어를 제공합니다.
많은 초보자들이 docker save, docker load, docker export, docker import를 비슷한 기능으로 생각하지만 실제로는 백업 대상과 복원 방식이 완전히 다릅니다. 이를 제대로 이해하지 못하면 이미지가 아닌 컨테이너만 백업하거나, 환경설정이 사라지는 등의 문제가 발생할 수 있습니다.
이번 글에서는 Docker Export와 Import의 개념부터 기본 사용법, Save와의 차이점, 실무 활용 사례까지 자세히 알아보겠습니다.
Docker Export란 무엇인가?
Docker Export는 실행 중이거나 중지된 컨테이너의 파일 시스템을 하나의 tar 파일로 내보내는 명령어입니다.
쉽게 말해 컨테이너 내부에 존재하는 파일만 백업하는 기능입니다.
Export를 수행하면 컨테이너 안에 있는 프로그램, 라이브러리, 설정 파일, 로그 파일 등이 하나의 tar 파일로 저장됩니다.
다만 Docker 이미지의 히스토리나 레이어 정보, 환경 변수, CMD, ENTRYPOINT 같은 메타데이터는 함께 저장되지 않습니다.
즉, Export는 컨테이너 자체를 복사하는 것이 아니라 컨테이너의 현재 파일 시스템만 백업하는 기능입니다.
Docker Import란 무엇인가?
Docker Import는 Export로 생성한 tar 파일을 새로운 Docker 이미지로 만드는 명령어입니다.
Import를 수행하면 tar 파일의 내용이 새로운 이미지로 등록되며, 이후 일반 이미지처럼 컨테이너를 생성하여 사용할 수 있습니다.
다만 Export 과정에서 환경 정보가 제거되므로 Import 후에는 필요한 환경 변수나 실행 명령을 다시 지정해야 합니다.
Docker Export 기본 사용법
Docker Export는 다음과 같이 사용할 수 있습니다.
docker export <컨테이너명> -o backup.tar
예를 들어 web 컨테이너를 백업하려면 다음과 같이 실행합니다.
docker export web -o web-backup.tar
명령이 완료되면 현재 컨테이너의 파일 시스템이 web-backup.tar 파일로 저장됩니다.
생성된 tar 파일은 다른 서버로 복사하거나 장기 보관용 백업 파일로 사용할 수 있습니다.
Docker Import 기본 사용법
Export한 tar 파일은 Import 명령으로 새로운 이미지로 등록할 수 있습니다.
docker import web-backup.tar myweb:v1
등록된 이미지는 일반 Docker 이미지와 동일하게 확인할 수 있습니다.
docker images
출력 결과입니다.
REPOSITORY TAG
myweb v1
이후 새로운 컨테이너를 생성하여 사용할 수 있습니다.
docker run -it myweb:v1
이처럼 Export와 Import를 함께 사용하면 컨테이너의 파일 시스템을 손쉽게 다른 서버로 이전하거나 백업할 수 있습니다.
Docker Export와 Docker Save의 차이
많은 사람들이 가장 헷갈려하는 부분입니다.
Docker Export는 컨테이너를 백업하는 기능이고, Docker Save는 이미지를 백업하는 기능입니다.
즉, Export는 현재 실행 중인 컨테이너 상태를 저장하며, Save는 Docker 이미지 자체를 저장합니다.
또한 Export는 이미지 레이어와 메타데이터를 저장하지 않지만, Save는 이미지의 모든 레이어와 태그 정보까지 함께 보존합니다.
따라서 다른 서버에서도 동일한 이미지를 그대로 사용하려면 Docker Save를 사용하는 것이 적합하며, 현재 컨테이너의 파일만 백업하려면 Docker Export를 사용하는 것이 좋습니다.
Docker Export 실무 활용 예제
Docker Export는 단순히 컨테이너를 백업하는 기능을 넘어 다양한 운영 환경에서 활용됩니다. 특히 개발 서버에서 작업한 내용을 다른 서버로 옮기거나, 인터넷 연결이 어려운 환경으로 컨테이너를 전달할 때 매우 유용합니다.
개발 서버에서 운영 서버로 컨테이너 이전
개발 환경에서 애플리케이션 설정과 프로그램 설치를 모두 완료한 뒤 운영 서버로 이전해야 하는 경우가 있습니다.
먼저 컨테이너를 Export합니다.
docker export web -o web.tar
생성된 web.tar 파일을 운영 서버로 복사한 뒤 다음과 같이 Import를 수행합니다.
docker import web.tar production-web:v1
이후 새로운 컨테이너를 실행하면 개발 환경과 거의 동일한 파일 구성을 사용할 수 있습니다.
인터넷이 연결되지 않은 내부망으로 이전
보안이 중요한 기업에서는 외부 인터넷 연결이 차단된 내부망 서버를 사용하는 경우가 많습니다.
이때 Export한 tar 파일을 USB나 내부 파일 서버를 통해 전달한 후 Import하면 인터넷 없이도 컨테이너 환경을 구축할 수 있습니다.
테스트 완료된 환경 보관
프로젝트 테스트가 완료된 컨테이너를 그대로 보관해야 하는 경우에도 Export가 유용합니다.
테스트 결과가 포함된 파일 시스템을 tar 파일로 저장하면 나중에 동일한 상태를 다시 복원하여 테스트를 재현할 수 있습니다.
장애 분석을 위한 백업
서비스 장애가 발생했을 때 컨테이너를 바로 삭제하기보다 먼저 Export를 수행하면 당시의 파일 시스템을 그대로 보관할 수 있습니다.
이후 다른 서버에서 Import하여 장애 원인을 분석하면 운영 서버에는 영향을 주지 않으면서 문제를 재현할 수 있습니다.
Linux 서버 문제 해결
한 운영 서버에서 웹 서비스가 정상적으로 실행되지 않는 문제가 발생했습니다.
컨테이너 내부에서 여러 설정 파일이 수정된 것으로 보였지만 어떤 파일이 변경되었는지 확인하기 어려운 상황이었습니다.
관리자는 먼저 현재 컨테이너를 백업했습니다.
docker export web -o emergency.tar
이후 테스트 서버에서 Import를 수행했습니다.
docker import emergency.tar emergency-image:v1
새로운 컨테이너를 생성한 뒤 문제를 분석한 결과 Nginx 설정 파일이 잘못 수정되어 있었고 일부 라이브러리 파일도 삭제된 것을 확인했습니다.
운영 서버를 직접 수정하지 않고도 동일한 환경에서 문제를 분석할 수 있었기 때문에 서비스 중단 시간을 최소화할 수 있었습니다.
Docker Export 사용 시 주의사항
Docker Export를 사용할 때 반드시 알아야 할 사항이 있습니다.
첫 번째는 이미지의 레이어 정보가 저장되지 않는다는 점입니다.
Import 후 생성되는 이미지는 하나의 레이어로 만들어지므로 기존 Docker 이미지처럼 히스토리를 확인할 수 없습니다.
두 번째는 환경 변수와 CMD, ENTRYPOINT 정보가 저장되지 않습니다.
Import 후에는 실행 명령이나 환경 설정을 다시 지정해야 정상적으로 동작하는 경우가 많습니다.
세 번째는 Docker Volume 데이터가 포함되지 않습니다.
Volume은 컨테이너 외부에 저장되기 때문에 Export를 수행해도 함께 백업되지 않습니다.
데이터베이스처럼 Volume을 사용하는 서비스는 별도의 백업 작업이 반드시 필요합니다.
Best Practice
Docker Export를 사용할 때는 다음과 같은 방법을 추천합니다.
- 컨테이너 삭제 전에 반드시 Export를 수행하여 백업을 남깁니다.
- 중요한 서비스는 Export와 함께 Volume도 별도로 백업합니다.
- 운영 서버보다 테스트 서버에서 먼저 Import하여 정상 동작을 확인합니다.
- 장기 보관이 필요한 경우 파일 이름에 날짜와 버전을 함께 기록합니다.
- 이미지 자체를 백업하려면 Export 대신 Docker Save를 사용하는 것이 좋습니다.
이러한 방법을 적용하면 컨테이너 이전과 복구 작업을 훨씬 안전하게 수행할 수 있습니다.
자주 묻는 질문
Docker Export는 실행 중인 컨테이너도 백업할 수 있나요?
네. 실행 중인 컨테이너와 중지된 컨테이너 모두 Export할 수 있습니다.
Docker Export는 Docker 이미지를 백업하는 명령어인가요?
아닙니다. Docker Export는 컨테이너의 파일 시스템만 백업합니다. 이미지 자체를 백업하려면 Docker Save를 사용해야 합니다.
Docker Volume 데이터도 함께 저장되나요?
아닙니다. Volume 데이터는 Export 대상이 아닙니다. 별도의 백업 절차가 필요합니다.
Import한 이미지는 기존 이미지와 동일한가요?
동일하지 않습니다. 파일은 복원되지만 이미지의 레이어 구조와 메타데이터는 유지되지 않습니다.
마무리
Docker Export와 Docker Import는 컨테이너의 현재 파일 시스템을 손쉽게 백업하고 다른 서버로 이전할 수 있는 매우 유용한 기능입니다.
특히 개발 환경을 테스트 서버로 옮기거나 장애 분석을 위해 현재 상태를 그대로 보관해야 하는 경우 자주 사용됩니다.
다만 이미지의 메타데이터와 레이어 정보는 저장되지 않고 Volume 데이터도 포함되지 않는다는 점을 반드시 이해해야 합니다.
이미지를 그대로 백업해야 하는 경우에는 Docker Save와 Docker Load를 사용하는 것이 더 적합합니다.
Docker 운영 환경에서는 Export와 Save의 차이를 명확히 이해하고 상황에 맞는 명령어를 선택하는 것이 중요합니다.