Simplify

도커 이미지 오프라인 백업/복원하기 How to backup/restore docker images 본문

Web & Server/Docker & Container

도커 이미지 오프라인 백업/복원하기 How to backup/restore docker images

Simplify - Jonghun 2019. 12. 27. 17:11

docker 로 개발을 진행하다 보면, 어쩔 수 없이 이미지를 빌드하게 됩니다. 물론 여기서 '어쩔 수 없이'라는 말이 걸리게 되긴 합니다만, 기본 이미지에 본인이 원하는 것을 docker-compose 를 사용하여 구동 시점에 처리해 주는 것도 좋지만, 이미지에 본인이 개발한 프로그램을 넣고, customizing 하는 과정을 거쳐야, 반복적으로 실행하는 과정(예를 들어 scale up 등)에서 불편함을 최소화할 수 있습니다. 

 

저의 경우, 이미지에 특정 설정 파일이 담긴 xml을 customizing 할 필요가 있었고, 매번 설정 파일을 Host에서 주입시켜 주기에는 이미지가 가진 온전한 파일을 덮어쓰기 때문에 깨림칙했던 것이 사실입니다. 

 

이러한 점을 보완하기 위해서 특정 WAS 이미지를 다운로드 받아 두고, 설정 관련한 파일은 외부에서 복사해서 대체하거나, 혹은 기존 파일의 일부분을 대체(sed 명령어 등으로)하여 이미지 자체가 내가 원하는 기능이 되도록 변경했습니다. 예를 들어 tomcat 같은 경우, webapp 폴더를 외부에 mount 하고 여기서 war 파일 등을 배포할 수 있지만, 호스트의 특정 경로에 대한 권한문제, docker container와 실행중인 파일 간에 견고함이 없어, 언제든 문제를 발생시킬 수 있다는 점 등으로 인해, 이미지를 직접 만들어서 배포, 구동하는 것으로 결정하였습니다. 

 

일반적으로, 어떤 Base Image 에 본인이 customizing 하고 나면, 이를 다시 docker hub와 같은 repository 에 업로드하여 관리하거나, 혹은 본인만의 private repository 를 구성하고 여기에 업로드하여 버전을 관리하는 경우도 있습니다. 

(docker pull / docker push 명령어 이용)

 

여기서는 어떠한 이유로든, public hub에 올릴 수 없거나, private repository 를 구성할 수 없거나, 네트워크가 private 망이거나 하는 등의 경우를 고려하고, 이미지를 백업/복원하는 것에 대해서 알아보겠습니다. 

 

이미지 백업하기

원하는 경로로 이동하여 다음과 같이 입력합니다. 

docker save [OPTIONS] IMAGE [IMAGE...]

사실 이렇게 적혀있고, 공식문서(아래 참고자료)에도 복잡하게 설명되어 있으나, 저는 아래 방법을 더 선호합니다.

docker save -o {image_tar_file_name}.tar {image_name}[:version]

 

-o 옵션을 이용하여 저장할 압축 파일명을 명시해 주고, 그 뒤에 저장할 이미지를 적어줍니다. 이렇게 하면 tar 파일로 압축된 파일이 생성됩니다.

 

이미지 복원하기 

위와 같이 압축한 파일을 들고 실제 사용할 곳에 가져갑니다. 물론 가져가는 방법이야, USB를 이용하든, 클라우드든, FTP든 다 가능합니다. 가져가고 나서 아래 명령어를 활용합니다.

docker load [OPTIONS]

위와 같이 tar파일로 압축된 경우라면 아래와 같이 사용 가능합니다. 

docker load -i {image_tar_file_name}.tar
docker load < {image_tar_file_name}.tar

이렇게 하면 이미지를 다시 불러올 수 있습니다. 

 

 

사실 위와 같은 작업을 거지는데, 새로운 환경에 동일한 이름의 이미지가 있거나 하면 문제가 될 것입니다. 따라서 공식 문서를 참고하여 어떠한 옵션으로 처리를 해야 하는지를 조금 더 살펴보시고 진행하시길 권장합니다.

 

 

출처/참고자료

 

 

Comments