본문 바로가기
Docker

다른 container로 image 옮기기 (export, import, 환경변수)

by Nirah 2022. 12. 8.

컨테이너끼리 데이터 복사는 불가하다.

실제 PC를 거쳐서 복사해야 한다. 이게 싫으면 볼륨을 공유해야 한다.

 

컨테이너끼리 이미지를 이동하려면

Save -> Load 방법이 있고

export -> import 방법이 있다. 

 

image 파일을 container에서 export

그리고 해당 파일은 import해서 image로 전환해서 옮기면 된다.

하지만 해당 image를 실행하면 설정 및 환경변수등이 초기화 되기 때문에 실행이 되지 않는 문제가 있다.

이 문제를 해결하려면 import시 CMD 작업, 그리고 실행 시 환경변수를 추가해 주면 해결이 가능하다.

 

 

   대상   output  
save  image tar  
load     tar      image  
       
export container   tar   설정값 및 환경변수 초기화.
데이터엔 영향 없음
import  tar   image  설정 및 환경변수 등 필요

 

                        

 

 

 

방법1 : Docker Hub

제일 최고의 방법은 도커 허브를 이용해 개인 리포지토리에 업로드 하고 다운로드 하는 것이다.

https://raid-1.tistory.com/83

 

 

 

 

 

방법2 : Save -> Load

 

이미지로 내보내고 이미지로 가져오는 건 실행에 아무 문제가 없다

먼저 centos:7과 alpine:latest 두 개의 이미지를 옮겨볼 것이다.

Docker Image를 tar 파일로 저장한다. 여러개 이미지를 한꺼번에 묶어서 옮길 수도 있다.

 

 

SAVE

# docker save -o image.tar nginx:latest alpine:latest

 

두 이미지 원본 삭제

# docker rmi alpine

# docker rmi nginx

 

 

LOAD

tar로 저장한 이미지 다시 불러오기 ( -i : image )

# docker load -i image.tar

 tar로 저장해서 다시 불러온 이미지들은 run 했을 때 실행이 잘 된다!

 

 

 

 

 

 

방법3 : export -> import

컨테이너 자체를 내보내는 방법

 

 

~~~~~~~~~~~~~~문제발생편~~~~~~~~~~~~~~~~

 

docker run -itd --name a1 alpine

docker attach a1

확인용 import.txt 파일 만들기

ctrl +p +q

 

 

docker export -o import.tar a1

 

다른 컨테이너에 넣기

docker import import.tar alpine:1

 

이렇게 export - import로 가져온 image는 실행하면 컨테이너가 실행이 안 된다!

환경변수가 모두 초기화되기 때문에 실행에 관련된 설정도 다 없는 상태가 돼버렸다..

 

뭔가 텅 비어 있는설정을 보고싶으면 다음과 같다.

docker inspect alpine:1

 

 

 

~~~~~~~~~~~~~~해결편~~~~~~~~~~~~~~~~

 

해당 문제를 해결하려면 애초에 아래와 같이 import 할 때에 환경 변수를 지정해줘야 한다. 

alpine의 경우는 bin/sh에 관련된 설정이 빠져있기 때문에 일어나는 문제므로.

(다른 image들은 각기 다 다르다)

 

docker import --change 'CMD ["bin/sh"]' import.tar alpine:3

 

환경 변수를 저장하여 import 한 이미지를 run → 잘 실행 됨

docker run -itd --name a5 alpine:3

docker attach a5

 

아까 저장한 확인용 import.txt 파일이 잘 보이는 것을 확인할 수 있다.

 

 

 

 

 

환경 변수

 

아래의 경우들은 예시이고, 여기 없는 image들은 직접 환경 변수 (Env, CMD)를 찾아서 입력해줘야 한다.

 

 

alpine의 경우

docker import --change 'CMD ["bin/sh"]' import.tar alpine:1

 

httpd의 경우

docker import --change 'env "PATH" "/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"'--change 'cmd ["httpd-foreground"]' httpd.tar httpd:1

 

 CentOS:7의 경우

docker import --change 'CMD ["/bin/bash"]' cent.tar centos:1

 

 

환경 변수 (Env) 직접 찾는 법

 

docker inspect h1

여기서 Env 부분과 Cmd 부분을 확인하면 된다.

 

 

환경 변수 지정 연습

 

환경 변수 지정하여 컨테이너 실행

docker run -itd -e a=100 --name a1 alpine

 

echo $a

100이 출력 된다

env

환경변수 리스트가 출력 된다.

 

 

도커 허브에서 필요한 환경 변수 찾기

 

클릭해서 쭉 내려보면 각 상황마다 필요한 환경 변수들에 대해 설명이 돼있다.

'Docker' 카테고리의 다른 글

Volume / bind mount ( Container Data 공유)  (0) 2022.12.09
Docker : MySQL:5.7 +php 설치  (0) 2022.12.09
HAProxy - WEB 연습  (0) 2022.12.08
Docker nginx-WEB  (0) 2022.12.08
Docker httpd-WEB  (0) 2022.12.01