[docker] 다른 호스트간에 Docker 컨테이너를 이동하는 방법은 무엇입니까?

컨테이너를 실행하는 도커를 한 호스트에서 다른 호스트로 이동하는 방법을 찾을 수 없습니다.

이미지처럼 컨테이너를 저장소로 푸시 할 수있는 방법이 있습니까? 현재 저는 컨테이너 내부에서 실행되는 애플리케이션과 관련된 데이터를 저장하기 위해 데이터 볼륨을 사용하지 않습니다. 따라서 일부 데이터는 컨테이너 내부에 있으며 설정을 다시 설계하기 전에 유지하고 싶습니다.



답변

실행중인 Docker 컨테이너를 한 호스트에서 다른 호스트로 이동할 수 없습니다.

를 사용하여 컨테이너의 변경 사항을 이미지에 커밋하고 docker commit이미지를 새 호스트로 이동 한 다음 docker run. 이렇게하면 애플리케이션이 컨테이너 내부에 생성 한 모든 데이터가 보존됩니다.

Nb : 볼륨 내부에 저장된 데이터를 보존하지 않습니다. 데이터 볼륨을 새 호스트로 수동으로 이동해야합니다.


답변

또는 저장소에 푸시하지 않으려면 다음을 수행하십시오.

  1. 컨테이너를 tarball로 내보내기

    docker export <CONTAINER ID> > /home/export.tar
    
  2. tarball을 새 컴퓨터로 이동

  3. 다시 가져 오기

    cat /home/export.tar | docker import - some-name:latest
    


답변

혼란스러운 매뉴얼과 헷갈리는 튜토리얼이 많아서 결국 저에게 효과가 있었던 것은 Docker가 내 글을 쓰는 시점에서 분명히 부풀려진 기대엿볼 때였 기 때문에 다음과 같습니다.

  1. Docker 이미지를 아카이브에 저장하십시오.
    docker save image_name > image_name.tar
  2. 다른 컴퓨터에 복사
  3. 다른 docker 시스템에서 다음과 같은 방법으로 docker load를 실행하십시오.
    cat image_name.tar | docker load

다른 답변에서 제안한대로 내보내기 및 가져 오기는 컨테이너 실행에 필요할 수있는 포트 및 변수를 내 보내지 않습니다. 그리고 “No command specified” 등과 같은 결과가 나올 수 있습니다. 다른 컴퓨터에로드하려고 할 때.

따라서 저장과 내보내기의 차이점은 저장 명령은 히스토리 및 메타 데이터와 함께 전체 이미지를 저장하는 반면 내보내기 명령은 히스토리 또는 메타 데이터없이 파일 구조 만 내 보낸다는 것입니다.

말할 필요도없이, 가져 오기를 수행하는 도커 하이퍼 바이저에 이미 해당 포트가있는 경우 다른 도커 컨테이너에 의해 충돌이 발생하고 노출 된 포트를 다시 구성해야합니다.


답변

Docker 문서에서 :

docker export컨테이너와 관련된 볼륨의 내용을 내 보내지 않습니다. 볼륨이 컨테이너의 기존 디렉토리 위에 마운트 된 경우은 볼륨 docker export의 내용이 아닌 기본 디렉토리 의 내용을 내 보냅니다 . 볼륨의
데이터 내보내기에 대한 예제는 사용 설명서의 데이터 볼륨 백업, 복원 또는 마이그레이션을 참조하십시오 .


답변

이 스크립트 사용 :
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. 컨테이너를 새 이미지에 커밋 / 저장 :

  1. ++ 컨테이너 커밋 :
    # docker stop
    # docker commit CONTAINER_NAME
    # docker save –output IMAGE_NAME.tar IMAGE_NAME : TAG

ps : “컨테이너 CONTAINER_NAME에 ‘/ var / home’에 마운트 된 볼륨이 있습니다.”(컨테이너를 검사하여 볼륨 경로를 지정해야합니다. # docker inspect CONTAINER_NAME)

  1. ++ 볼륨 저장 : 우분투 이미지를 사용하여 작업합니다.
    # 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.”

이제 $ {pwd} / backup을 보면 tar 형식으로 볼륨을 찾을 수 있습니다.
지금까지 컨테이너의 이미지 ‘IMAGE_NAME.tar’와 볼륨 ‘volume_backup.tar’가 있습니다.

이제 새 호스트에서 동일한 이전 컨테이너를 다시 만들 수 있습니다.


답변