Computer >> 컴퓨터 >  >> 체계 >> Linux

Docker 컨테이너를 다른 호스트로 복사/이동하는 방법

Docker 컨테이너를 다른 호스트로 복사/이동하는 방법

Docker 컨테이너는 말하자면 소프트웨어의 작은 상자이기 때문에 컴퓨터에서 컴퓨터로 복사하고 이동할 수 있습니다. 그러나 이는 대규모 조직에서 자체 이미지를 사용자 정의하고 적절하다고 판단되는 대로 서버 전체에 배포할 수 있는 자체 리포지토리를 설정하기 때문에 자주 논의되지 않습니다. 하지만 가끔 하나 이상의 컨테이너를 이동해야 하는 경우에는 자체 유통 라인을 설정하는 수고를 겪을 필요가 없습니다.

로컬 컴퓨터의 Docker 인스턴스에서 작업하고 더 강력한 서버로 이동하기로 결정했을 수 있습니다. 또는 사용자 정의 컨테이너를 여러 컴퓨터에 배포하고 "복사하여 붙여넣기"하고 싶을 수도 있습니다. 다른 경우에는 클라우드 컴퓨팅 공급자에 만족하지 못하고 다른 공급자로 전환하고 싶을 수 있습니다. 상황이 어떻든 아래에서 자세히 설명할 다소 간단한 절차가 있습니다.

소스 호스트에서 컨테이너 이미지 저장

컨테이너를 먼저 중지할 필요는 없지만 중지하는 것이 좋습니다. Docker 인스턴스의 데이터 스냅샷을 생성합니다. 이 작업을 수행하는 동안 실행 중인 경우 일부 파일이 스냅샷에서 불완전할 수 있습니다. 누군가 500MB 파일을 업로드한다고 상상해보십시오. 250MB가 업로드되면 docker commit을 실행합니다. 명령. 그런 다음 업로드가 계속되지만 다른 호스트에서 이 Docker 이미지를 복원하면 500MB 중 250MB만 사용할 수 있습니다.

따라서 가능하면 먼저 인스턴스를 중지하십시오.

docker stop NAME_OF_INSTANCE
Docker 컨테이너를 다른 호스트로 복사/이동하는 방법

Docker 컨테이너는 일반 초기 이미지로 빌드됩니다. 시간이 지남에 따라 이 기본 이미지에 고유한 변경 사항을 추가합니다. 컨테이너 내부에서 실행되는 프로세스는 자체 데이터를 저장하거나 다른 변경을 수행할 수도 있습니다. 이 모든 것을 보존하기 위해 이 새 상태를 새 이미지에 커밋할 수 있습니다.

인스턴스가 현재 실행 중인 경우 이 작업은 콘텐츠가 저장되는 동안 인스턴스를 일시 중지합니다. 컨테이너에 많은 데이터를 추가한 경우 이 작업을 완료하는 데 시간이 더 오래 걸립니다. 이것이 문제인 경우 docker commit -p=false NAME_OF_INSTANCE mycontainerimage를 입력하여 이 일시 중지를 피할 수 있습니다. 다음 명령 대신. 그러나 절대적으로 필요한 경우가 아니면 이 작업을 수행하지 마십시오. 이 경우 데이터가 일치하지 않거나 불완전한 이미지를 생성할 확률이 높아집니다.

이 자습서에서는 결과 이미지인 mycontainerimage에 대해 일반 이름을 선택했습니다. . 원하는 경우 이 이름을 변경할 수 있습니다. 그렇게 하면 이후에 발생하는 모든 명령에서 이를 교체하는 것을 잊지 마십시오.

docker commit NAME_OF_INSTANCE mycontainerimage
Docker 컨테이너를 다른 호스트로 복사/이동하는 방법

이제 이 이미지를 파일로 저장하고 압축하세요.

docker save mycontainerimage | gzip > mycontainerimage.tar.gz

그런 다음 원하는 파일 전송 방법을 사용하고 mycontainerimage.tar.gz를 복사합니다. 컨테이너를 마이그레이션하려는 호스트로 이동합니다.

대상 호스트에 컨테이너 이미지 로드

이미지를 전송한 호스트에 로그인한 후 Docker로 가져옵니다.

gunzip -c mycontainerimage.tar.gz | docker load

여기서 이 컨테이너를 초기화한 적이 없으므로 docker start로 시작할 수 없습니다. 아직. 대신 이 Docker 인스턴스를 처음 실행할 때 과거에 사용한 것과 동일한 명령을 실행하십시오. 이제 유일한 차이점은 과거에 사용한 이미지 대신 마지막에 "mycontainerimage"를 사용한다는 것입니다.

다음 명령은 예시일 뿐입니다. 해당되지 않는 한 이것을 복사하여 붙여넣지 마십시오. (이미지를 처음 실행할 때 특별한 매개변수가 필요하지 않았습니다)

docker run -d --name=PICK_NAME_FOR_CONTAINER mycontainerimage

대조적으로 다음은 --publish 매개변수가 있는 명령의 예입니다. 호스트 시스템의 포트 80을 컨테이너의 포트 80으로 전달하는 데 필요했습니다.

docker run -d --name=http-server --publish 80:80 mycontainerimage

이후 docker stop을 사용하여 이 컨테이너를 정상적으로 중지하고 시작할 수 있습니다. 및 docker start 명령.

파일을 만들지 않고 이미지 전송

때때로 mycontainerimage.tar.gz 생성을 건너뛰고 싶을 수도 있습니다. 파일. 컨테이너에 많은 데이터가 있기 때문에 디스크 공간이 충분하지 않을 수 있습니다. 하나의 명령으로 대상 호스트에서 이미지를 저장, 압축, 전송, 압축 해제 및 로드할 수 있습니다. docker commit 실행 후 첫 번째 섹션에서 설명한 명령에서 다음을 사용할 수 있습니다.

docker save mycontainerimage | gzip | ssh root@203.0.113.1 'gunzip | docker load'

이제 SSH 클라이언트가 내장되어 있으므로 Windows에서도 작동해야 합니다(PuTTY는 더 이상 필요하지 않음).

그런 다음 docker run을 계속 진행합니다. 귀하의 상황에 적용되는 명령입니다.

결론

docker savedocker load 때때로 컨테이너를 이동하기 위한 임시 솔루션으로 좋습니다. 그러나 이 작업을 자주 수행하는 경우 대신 자신의 개인 저장소를 설정하는 것이 좋습니다.

이미지 제공:공군 의료 서비스