다른 호스트간에 Docker 컨테이너를 이동하는 방법은 무엇입니까?
컨테이너를 실행하는 도커를 한 호스트에서 다른 호스트로 이동하는 방법을 찾을 수 없습니다.
이미지처럼 컨테이너를 저장소로 푸시 할 수있는 방법이 있습니까? 현재 컨테이너 내부에서 실행되는 애플리케이션과 관련된 데이터를 저장하기 위해 데이터 볼륨을 사용하지 않습니다. 따라서 일부 데이터는 컨테이너 내부에 있으며 설정을 다시 설계하기 전에 유지하고 싶습니다.
실행중인 Docker 컨테이너를 한 호스트에서 다른 호스트로 이동할 수 없습니다.
를 사용하여 컨테이너의 변경 사항을 이미지에 커밋하고 docker commit
이미지를 새 호스트로 이동 한 다음 docker run
. 이렇게하면 애플리케이션이 컨테이너 내부에 생성 한 모든 데이터가 보존됩니다.
Nb : 볼륨 내부에 저장된 데이터를 보존하지 않습니다. 데이터 볼륨을 새 호스트로 수동으로 이동해야합니다.
또는 저장소에 푸시하지 않으려면 다음을 수행하십시오.
컨테이너를 tarball로 내보내기
docker export <CONTAINER ID> > /home/export.tar
tarball을 새 컴퓨터로 이동
다시 가져 오기
cat /home/export.tar | docker import - some-name:latest
혼란스러운 매뉴얼과 혼란스러운 튜토리얼을 많이 거친 후 결국에는 Docker가 부풀려진 기대 를 엿볼 때 분명히 글을 쓰는 시점에 있었기 때문에 결국 저에게 효과적 이었습니다 .
- Docker 이미지를 아카이브에 저장하십시오.
docker save image_name > image_name.tar
- 다른 컴퓨터에 복사
- 다른 docker 시스템에서 다음과 같은 방법으로 docker load를 실행하십시오.
cat image_name.tar | docker load
다른 답변에서 제안한대로 내보내기 및 가져 오기는 컨테이너 실행에 필요할 수있는 포트 및 변수를 내 보내지 않습니다. 그리고 "명령이 지정되지 않았습니다" 등의 문제가 발생할 수 있습니다 . 다른 컴퓨터에로드하려고 할 때.
따라서 저장과 내보내기의 차이점은 저장 명령은 히스토리 및 메타 데이터와 함께 전체 이미지를 저장하는 반면 내보내기 명령은 히스토리 또는 메타 데이터없이 파일 구조 만 내 보낸다는 것입니다.
말할 필요도없이, 가져 오기를 수행하는 도커 하이퍼 바이저에 이미 해당 포트가있는 경우 다른 도커 컨테이너에 의해 충돌이 발생하고 노출 된 포트를 다시 구성해야합니다.
Docker 문서에서 :
docker export
컨테이너와 관련된 볼륨의 내용을 내 보내지 않습니다. 볼륨이 컨테이너의 기존 디렉토리 위에 마운트 된 경우은 볼륨docker export
의 내용이 아닌 기본 디렉토리 의 내용을 내 보냅니다 . 볼륨의 데이터 내보내기에 대한 예제는 사용 설명서의 데이터 볼륨 백업, 복원 또는 마이그레이션을 참조하십시오 .
기타 외부 도구 : 관련 데이터 볼륨이있는 컨테이너를 이동하려면 Flocker https://clusterhq.com/flocker/introduction/을 사용할 수 있습니다.
이 스크립트 사용 : https://github.com/ricardobranco777/docker-volumes.sh
이렇게하면 볼륨의 데이터 가 보존됩니다.
사용 예 :
# Stop the container
docker stop $CONTAINER
# Create a new image
docker commit $CONTAINER $CONTAINER
# Save image
docker save -o $CONTAINER.tar $CONTAINER
# Save the volumes (use ".tar.gz" if you want compression)
docker-volumes.sh $CONTAINER save $CONTAINER-volumes.tar
# Copy image and volumes to another host
scp $CONTAINER.tar $CONTAINER-volumes.tar $USER@$HOST:
# On the other host:
docker load -i $CONTAINER.tar
docker create --name $CONTAINER [<PREVIOUS CONTAINER OPTIONS>] $CONTAINER
# Load the volumes
docker-volumes.sh $CONTAINER load $CONTAINER-volumes.tar
# Start container
docker start $CONTAINER
나는 이것에 대해 많은 해결책을 시도했고 이것이 나를 위해 일한 것입니다.
1.commit/save container to new image :
- ++ commit the container:
# docker stop
# docker commit CONTAINER_NAME
# docker save --output IMAGE_NAME.tar IMAGE_NAME:TAG
ps:"Our container CONTAINER_NAME has a mounted volume at '/var/home'" ( you have to inspect your container to specify its volume path : # docker inspect CONTAINER_NAME )
- ++ save its volume : we will use an ubuntu image to do the thing.
# mkdir backup
# docker run --rm --volumes-from CONTAINER_NAME -v ${pwd}/backup:/backup ubuntu bash -c “cd /var/home && tar cvf /backup/volume_backup.tar .”
Now when you look at ${pwd}/backup , you will find our volume under tar format.
Until now, we have our conatainer's image 'IMAGE_NAME.tar' and its volume 'volume_backup.tar'.
Now you can , recreate the same old container on a new host.
참고URL : https://stackoverflow.com/questions/28734086/how-to-move-docker-containers-between-different-hosts
'Development Tip' 카테고리의 다른 글
express.js에서“app.render”와“res.render”의 차이점은 무엇입니까? (0) | 2020.10.09 |
---|---|
JS-base64 코드에서 이미지 너비와 높이 가져 오기 (0) | 2020.10.09 |
MySql에서 기본값으로 함수를 사용할 수 있습니까? (0) | 2020.10.09 |
HTML5 비디오 태그가있는 로컬 (하드 드라이브) 비디오 파일을 재생 하시겠습니까? (0) | 2020.10.08 |
파이썬의 re : 문자열에 정규식 패턴이 포함 된 경우 True 반환 (0) | 2020.10.08 |