sourcecode

서로 다른 호스트 간에 도커 컨테이너를 이동하는 방법은 무엇입니까?

codebag 2023. 8. 6. 10:04
반응형

서로 다른 호스트 간에 도커 컨테이너를 이동하는 방법은 무엇입니까?

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

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

또는 리포지토리로 푸시하지 않으려면 다음을 수행합니다.

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

    docker export <CONTAINER ID> > /home/export.tar
    
  2. 새 기계로 타르볼 이동

  3. 다시 가져오기

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

다음과 같이 컨테이너를 이동할 수도 있습니다.

  1. 소스 호스트에서 컨테이너를 중지합니다.

    docker stop x
    

    를 테이너시경으로 했다면,-v마운트된 파일과 디렉터리를 새 호스트에 복사해야 합니다.

  2. 변경 내용 커밋

    docker commit -p x x
    
  3. 이미지에 용기 저장

    docker save -o x x
    
  4. x 파일을 새 대상 호스트에 복사합니다.

  5. 대상 호스트에 연결합니다.

  6. 새 이미지 로드

    docker load -i x
    
  7. 새 이미지 실행

    docker run 
    

    :-v대상 호스트에 마운트된 파일 및 디렉토리를 참조하여 소스 호스트를 미러링해야 할 수 있습니다.

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

컨테이너의 변경 내용을 이미지에 커밋하고 이미지를 새 호스트로 이동한 다음 를 사용하여 새 컨테이너를 시작할 수 있습니다.이렇게 하면 응용 프로그램이 컨테이너 내부에 생성한 모든 데이터가 보존됩니다.

NB: 볼륨 내에 저장된 데이터는 보존되지 않으므로 데이터 볼륨을 새 호스트로 수동으로 이동해야 합니다.

Docker는 분명히 부풀려진 기대의 정점에 있는 제 글의 시기이기 때문에 혼란스러운 매뉴얼과 혼란스러운 튜토리얼을 많이 겪은 후에 결국 제게 효과가 있었던 것은 다음과 같습니다.

  1. 도커 이미지를 아카이브에 저장합니다.
    docker save image_name > image_name.tar
  2. 다른 시스템에 복사
  3. 다른 도커 컴퓨터에서 다음 방법으로 도커 로드를 실행합니다.
    cat image_name.tar | docker load

다른 답변에서 제안한 것처럼 내보내기 및 가져오기는 컨테이너를 실행하는 데 필요한 포트 및 변수를 내보내지 않습니다.그리고 "No command specified" 등의 문제가 발생할 수 있습니다.다른 기계에 로드하려고 할 때.

따라서 저장 명령어와 내보내기 명령어의 차이점은 저장 명령어는 기록 및 메타데이터가 포함된 전체 이미지를 저장하는 반면 내보내기 명령어는 기록 또는 메타데이터 없이 파일 구조만 내보냅니다.

물론 가져올 도커 하이퍼바이저에서 다른 도커 컨테이너를 통해 이미 가져온 포트가 있으면 충돌이 발생하고 노출된 포트를 재구성해야 합니다.

참고: 도커로 데이터를 이동하려면 컨테이너와 함께 이동해야 하는 영구 저장소가 있을 수 있습니다.

다음 스크립트 사용: 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

도커 설명서에서:

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

저는 이를 위해 많은 해결책을 시도했고, 이것이 저에게 효과적인 해결책입니다.

1.컨테이너를 새 이미지에 커밋/저장:

  1. 컨테이너 커밋:
    도커 스톱
    도커 커밋 컨테이너_NAME
    도커 저장 --output IMAGE_NAME.tar IMAGE_NAME:TAG


ps:"컨테이너_NAME의 마운트된 볼륨이 '/var/home'에 있습니다."(컨테이너의 볼륨 경로를 지정하려면 컨테이너를 검사해야 합니다. #docker inspect Container_NAME )

  1. 볼륨을 저장합니다. 우분투 이미지를 사용하여 작업을 수행합니다.
    mkdir 백업
    도커 실행 --rm --volumes-from CONTENT_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'를 보유하고 있습니다.

이제 새 호스트에서 동일한 이전 컨테이너를 재생성할 수 있습니다.

도커 내보내기 | gzip > .tar.gz

#new host gunzip < /mnt/usb/.tar.gz | 도커 가져오기 -

도커 런 -i -p 80:80 /bin/delay

도커 데스크톱을 사용하는 경우 이 확장을 사용할 수 있습니다.

아니면 이 링크를 보고 배후에서 어떻게 작동하는지 설명할 수 있습니다.혼자서 해보세요.

언급URL : https://stackoverflow.com/questions/28734086/how-to-move-docker-containers-between-different-hosts

반응형