컨테이너끼리 데이터 복사는 불가하다.
실제 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
제일 최고의 방법은 도커 허브를 이용해 개인 리포지토리에 업로드 하고 다운로드 하는 것이다.
방법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 |