클라우드 기초/도커&컨테이너

docker export, import (도커 이미지 복사)

라라쇼퍼 2023. 6. 18. 15:46
반응형

지난 시간에는 파일을 도커로 복사하는 방법(cp)을 알아보았습니다.

 

이번에는 이미지를 복사하는 방법을 알아보겠습니다.

 

이미지는 cp 로 복사할 수 없습니다.

이미지가 저장되어 있는 파일을 확인해보면 이미지는 암호화된 형태로 저장된 것을 알 수 있습니다.

이처럼 암호화된 파일은 cp로 복사가 불가능합니다. 

 

따라서, tar 형태로 만든 다음 다른 도커가 있는 디렉토리로 전송한 후 압축을 푸는 방법으로 복제할 수 있습니다

(이미지를 아카이브 파일로 만든 다음 이를 이미지로 풀어서 사용하는 방법). 

 

실행중인 컨테이너를 아카이브로 만든 다음 이미지로 만들어서 실행하는 방법도 있으나, 이는 권장하지 않습니다. 

구성 정보가 전부 초기화되기 때문입니다. 

 


실습을 해보겠습니다. 

 

2개의 가상머신에 docker 가 각각 설치되어 있어야 합니다. 

 

1번 가상머신의 도커에는

alpine 이미지가 다운로드된 상태입니다. 

alpine 이미지를 tar 파일로 생성해봅니다.

 

docker save -o [압축파일명.tar] [압축할 리포지토리:태그]

docker save -o alpine.tar alpine

apline.tar 가 생성되었음을 확인합니다.

 

이제 2번 가상머신의 도커로 이미지를 /root 디렉토리에 전송해보겠습니다. 

 

scp alpine.tar root@10.0.0.12:/root

 

2번 가상머신으로 잘 복사된 것을 확인했습니다. 

이제 alpine.tar 파일을 압축 해제 해보겠습니다.

 

docker load -i alpine.tar

압축 해제 후 도커 이미지 목록을 확인해보면 alpine 이 있는 것을 볼 수 있습니다.  

실행되는지도 확인해봅니다. 

 


이번에는 2개의 이미지를 하나의 tar 파일을 통해 복사해보겠습니다. 

 

docker save -o web.tar nginx httpd

목록 확인

확인해보는 다른 방법

tar tvf web.tar


2번 가상머신으로 전송 및 압축 해제까지 진행합니다. 

 

scp web.tar root@10.0.0.12:/root   ->1번 가상머신

docker load -i web.tar      ->2번 가상머신

 

실행 확인


이번에는 컨테이너를 이미지화 및 복제 전송해보겠습니다.

 

일단 1번 가상머신에서 alpine 도커를 실행합니다.

 

docker run -itd --name a1 alpine

 

호스트에서 export.txt 파일에 test 라는 내용을 적은 파일을 일단 하나 생성합니다. 

 

vi export.txt

 

이를 alpine a1 컨테이너의 루트 디렉토리에 복제해둡니다.

 

docker cp export.txt a1:/

 

a1에 잘 들어가 있는지 확인합니다.

 

docker export -o [생성할 파일이름] [컨테이너 이름]

docker export -o alpine1.tar a1

tar 파일 생성 확인

 

이제 생성된 tar 파일을 2번 가상 머신으로 전송합니다.

scp alpine1.tar root@10.0.0.12:/root

 

2번 가상머신에서 alpine1.tar 파일을 압축 해제 해봅니다.  export로 tar 파일을 만들었다면 import로 해제합니다.

 

docker import alpine1.tar alpine1:latest

이미지 목록에 떠 있는 것을 확인하였습니다. 

그런데 실행을 해보면 에러가 납니다. 

 

컨테이너를 이미지로 만들어서 import 하면 문제가 설정파일이 다 날라가 버리는 문제가 있습니다. 

 

inspect로 도커를 확인해보면 cmd, Env 가 null 상태임을 알 수 있습니다. 

docker inspect alpine1

컨테이너를 내보내게 되면 설정파일만 초기화됩니다.

그래서 가져올 때 환경변수나 cmd 명령을 지정해주셔야 합니다.

 

docker import --change 'CMD ["/bin/sh"]' alpine1.tar alpine2:latest

 

 alpine2 가 잘 생성되었습니다. 

docker inspect alpine2

 

이제는 cmd 설정이 잘 되어 있습니다. 

실행을 확인해봅니다.

 

그리고 아까 export.txt 넣어두었기 때문에 / 디렉토리에 잘 있는지 확인해봅니다. 

 

15-26-51 :28

설정파일만 초기화될 뿐 나머지 파일을 그대로 옮겨오기 때문에 아까 복사해둔 export.txt 가 들어있음을 확인할 수 있습니다. 

 

따라서 정리하면

 

                 원본          명령어        타겟

save         image         load           image

export      container    import        image(단, 설정이 초기화됨)

반응형