컨테이너를 실행하는 도커를 한 호스트에서 다른 호스트로 이동하는 방법을 찾을 수 없습니다.
이미지처럼 컨테이너를 저장소로 푸시 할 수있는 방법이 있습니까? 현재 저는 컨테이너 내부에서 실행되는 애플리케이션과 관련된 데이터를 저장하기 위해 데이터 볼륨을 사용하지 않습니다. 따라서 일부 데이터는 컨테이너 내부에 있으며 설정을 다시 설계하기 전에 유지하고 싶습니다.
컨테이너를 실행하는 도커를 한 호스트에서 다른 호스트로 이동하는 방법을 찾을 수 없습니다.
이미지처럼 컨테이너를 저장소로 푸시 할 수있는 방법이 있습니까? 현재 저는 컨테이너 내부에서 실행되는 애플리케이션과 관련된 데이터를 저장하기 위해 데이터 볼륨을 사용하지 않습니다. 따라서 일부 데이터는 컨테이너 내부에 있으며 설정을 다시 설계하기 전에 유지하고 싶습니다.
docker save
컨테이너가 아닌 이미지를 저장하기위한 것입니다. docs.docker.com/engine/reference/commandline/save
답변:
실행중인 Docker 컨테이너를 한 호스트에서 다른 호스트로 이동할 수 없습니다.
를 사용하여 컨테이너의 변경 사항을 이미지에 커밋하고 docker commit
이미지를 새 호스트로 이동 한 다음 docker run
. 이렇게하면 애플리케이션이 컨테이너 내부에 생성 한 모든 데이터가 보존됩니다.
Nb : 볼륨 내부에 저장된 데이터를 보존하지 않습니다. 데이터 볼륨을 새 호스트로 수동으로 이동해야합니다.
docker stop x
. 2. 변경 사항을 커밋하십시오 docker commit -p x x
. 3. 컨테이너를 이미지에 저장합니다 docker save -o x x
. 4. x 파일을 새 호스트로 이동하고 새 호스트에서 새 이미지를로드합니다 dokcer load -i x
( -v
옵션으로 컨테이너를 시작한 경우 이러한 파일도 새 호스트로 이동해야합니다). 5.이 이미지 실행docker run (-v is required to mount these files if needed)
또는 저장소에 푸시하지 않으려면 다음을 수행하십시오.
컨테이너를 tarball로 내보내기
docker export <CONTAINER ID> > /home/export.tar
tarball을 새 컴퓨터로 이동
다시 가져 오기
cat /home/export.tar | docker import - some-name:latest
혼란스러운 매뉴얼과 헷갈리는 튜토리얼이 많아서 결국 저에게 효과가 있었던 것은 Docker가 내 글을 쓰는 시점에서 분명히 부풀려진 기대 를 엿볼 때였 기 때문에 다음과 같습니다.
docker save image_name > image_name.tar
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. 컨테이너를 새 이미지에 커밋 / 저장 :
ps : "컨테이너 CONTAINER_NAME에 '/ var / home'에 마운트 된 볼륨이 있습니다."(컨테이너를 검사하여 볼륨 경로를 지정해야합니다. # docker inspect CONTAINER_NAME)
이제 $ {pwd} / backup을 보면 tar 형식으로 볼륨을 찾을 수 있습니다.
지금까지 컨테이너의 이미지 'IMAGE_NAME.tar'와 볼륨 'volume_backup.tar'가 있습니다.
이제 새 호스트에서 동일한 이전 컨테이너를 다시 만들 수 있습니다.