etc./StackOverFlow

저장소를 사용하지 않고 한 호스트에서 다른 호스트로 Docker 이미지를 복사하는 방법

청렴결백한 만능 재주꾼 2022. 1. 5. 09:43
반응형

질문자 :Larry Cai


개인용이든 공용이든 상관없이 리포지토리를 사용하지 않고 한 시스템에서 다른 시스템으로 Docker 이미지를 전송하려면 어떻게 해야 합니까?

VirtualBox에서 나만의 이미지를 만들고 작업이 완료되면 실제 사용을 위해 다른 컴퓨터에 배포하려고 합니다.

Red Hat Linux와 같은 자체 기반 이미지를 기반으로 하기 때문에 Dockerfile에서 다시 만들 수 없습니다. 내 dockerfile은 쉽게 이식할 수 없습니다.

사용할 수 있는 간단한 명령이 있습니까? 아니면 다른 해결책?



Docker 이미지를 tar 파일로 저장해야 합니다.

 docker save -o <path for generated tar file> <image name>

cp , scp 또는 rsync (큰 파일에 권장)와 같은 일반 파일 전송 도구를 사용하여 이미지를 새 시스템에 복사합니다. 그런 다음 이미지를 Docker에 로드해야 합니다.

 docker load -i <path to image tar file>

추신: 모든 명령 sudo 해야 할 수도 있습니다.

편집: -o를 사용하여 파일 이름(디렉토리뿐 아니라)을 추가해야 합니다. 예를 들면 다음과 같습니다.

 docker save -oc:/myfile.tar centos:16

Daiwei

SSH를 통해 Docker 이미지 전송, 즉석에서 콘텐츠 압축:

 docker save <image> | bzip2 | ssh user@host docker load

docker load 자동으로 이미지를 압축해제합니다. gzip , bzip2xz 지원합니다.

전송이 어떻게 진행되는지 확인하기 위해 파이프 중간에 pv 를 두는 것도 좋은 생각입니다.

 docker save <image> | bzip2 | pv | ssh user@host docker load

pv 에 대한 추가 정보: 홈 페이지 , 매뉴얼 페이지 ).

@Thomas Steinbach의 중요 참고 사항: 고대역폭에서 bzip 은 충분히 빠르게 압축할 수 없습니다. 10MB/s 이상으로 업로드할 수 있는 경우 gzip / gunzip bzip2 보다 훨씬 빠릅니다.

3G를 사용 중이고 인터넷이 느린 경우 xz 를 사용할 수 있다고 제안합니다. 더 높은 압축률을 제공합니다.


kolypto

파일 경로 또는 공유 NFS 위치에 이미지를 저장하려면 다음 예를 참조하십시오.

다음을 수행하여 이미지 ID를 가져옵니다.

 docker images

id가 "matrix-data"인 이미지가 있다고 가정합니다.

다음 ID로 이미지를 저장합니다.

 docker save -o /home/matrix/matrix-data.tar matrix-data

경로에서 호스트로 이미지를 복사합니다. 이제 다음을 사용하여 로컬 Docker 설치로 가져옵니다.

 docker load -i <path to copied image file>

Sohan

먼저 Docker 이미지를 압축된 아카이브에 저장합니다.

 docker save <docker image name> | gzip > <docker image name>.tar.gz

그런 다음 아래 명령을 사용하여 내보낸 이미지를 Docker에 로드합니다.

 zcat <docker image name>.tar.gz | docker load

Damodaran

DOCKER_HOST 변수와 함께 한 DOCKER_HOST

 docker save app:1.0 | gzip | DOCKER_HOST=ssh://user@remotehost docker load

vitalets

운영

 docker images

호스트의 이미지 목록을 보려면 Awesomesauce 라는 이미지가 있다고 가정해 보겠습니다. 터미널에서 이미지를 내보내려는 디렉토리로 cd 이제 실행:

 docker save awesomesauce:latest > awesomesauce.tar

tar 파일을 썸 드라이브 등에 복사한 다음 새 호스트 컴퓨터에 복사합니다.

이제 새 호스트에서 다음을 수행합니다.

 docker load < awesomesauce.tar

이제 커피를 마시고 Hacker News를 읽으십시오 ...


Neil Girardi

컨테이너 파일 시스템의 병합된 내보내기의 경우 다음을 사용하십시오.

docker export CONTAINER_ID > my_container.tar

cat my_container.tar | docker import - 사용 | cat my_container.tar | docker import - 이미지를 가져옵니다.


Panagiotis Moustafellos

docker-push-ssh 는 이 시나리오를 위해 만든 명령줄 유틸리티입니다.

서버에 임시 개인 Docker 레지스트리를 설정하고, 로컬 호스트에서 SSH 터널을 설정하고, 이미지를 푸시한 다음, 자체적으로 정리합니다.

docker save 보다 이 접근 방식의 이점(대부분의 답변을 작성하는 시점에서 이 방법을 사용하고 있음)은 새 레이어만 서버로 푸시되어 업로드가 훨씬 빨라집니다.

종종 dockerhub와 같은 중간 레지스트리를 사용하는 것은 바람직하지 않고 번거롭습니다.

https://github.com/brthor/docker-push-ssh

설치:

 pip install docker-push-ssh

예시:

docker-push-ssh -i ~/my_ssh_key username@myserver.com my-docker-image

insecure_registries 구성에 로컬 호스트를 수동으로 추가해야 한다는 것입니다. 도구를 한 번 실행하면 유익한 오류가 표시됩니다.

 Error Pushing Image: Ensure localhost:5000 is added to your insecure registries. More Details (OS X): https://stackoverflow.com/questions/32808215/where-to-set-the-insecure-registry-flag-on-mac-os

Mac OS에서 '--insecure-registry' 플래그를 어디에서 설정해야 합니까?


brthornbury

docker-machine을 사용할 때 다음을 사용하여 머신 mach1mach2 간에 이미지를 복사할 수 있습니다.

 docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load

pv 를 붙여서 진행률 표시기를 얻을 수도 있습니다.

 docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load

현재 기본 docker-host를 사용하기 docker-machine config 하위 셸 중 하나를 생략할 수도 있습니다.

 docker save <image> | docker $(docker-machine config <mach>) load

현재 docker-host에서 mach

또는

 docker $(docker-machine config <mach>) save <image> | docker load

mach 에서 현재 docker-host로 복사합니다.


matlehmann

이미지 ID가 7ebc8510bc2c인 couchdb-cartridge 를 저장해야 한다고 가정합니다.

 stratos@Dev-PC:~$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB 192.168.57.30:5042/couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB ubuntu 14.04 53bf7a53e890 3 days ago 221.3 MB

archiveName 이미지를 tar 파일에 저장합니다. /media/sf_docker_vm/ 을 사용하여 이미지를 저장합니다.

 stratos@Dev-PC:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar

FTP , SCP 등 환경에서 작동하는 모든 방법을 사용하여 archiveName.tar 파일을 새 Docker 인스턴스에 복사합니다.

docker load 명령을 실행하고 이미지 tar 파일의 위치를 지정하십시오.

 stratos@Dev-PC:~$ docker load < /media/sf_docker_vm/archiveName.tar

마지막으로 docker images 명령을 실행하여 이미지를 사용할 수 있는지 확인합니다.

 stratos@Dev-PC:~$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE couchdb-cartridge latest 7ebc8510bc2c 17 hours ago 1.102 GB 192.168.57.30:5042/couchdb-cartridge latest bc8510bc2c 17 hours ago 1.102 GB ubuntu 14.04 4d2eab1c0b9a 3 days ago 221.3 MB

이 자세한 게시물을 찾으십시오.


tk_

로컬 Docker 설치에서 minikube VM으로 이미지를 전송하려면:

 docker save <image> | (eval $(minikube docker-env) && docker load)

Bryan Larsen

다른 모든 답변은 매우 유용합니다. docker machine scp 사용하여 쉬운 방법을 알아냈습니다.

Docker Machine v0.3.0부터 scp는 한 Docker 시스템에서 다른 Docker 시스템으로 파일을 복사하기 위해 도입되었습니다. Docker Machine이 SSH 자격 증명을 처리하므로 로컬 컴퓨터에서 AWS EC2 또는 Digital Ocean과 같은 원격 Docker 시스템으로 파일을 복사하려는 경우 매우 편리합니다.

  1. 다음과 같이 docker save 사용하여 이미지를 저장합니다.

     docker save -o docker-images.tar app-web
  2. docker-machine scp를 사용하여 이미지 복사

     docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu

원격 Docker 시스템이 remote-machine 이고 tar 파일이 있어야 하는 디렉토리가 /home/ubuntu 합니다.

  1. 도커 이미지 로드

     docker-machine ssh remote-machine sudo docker load -i docker-images.tar

Peng

태그가 있는 모든 이미지를 이동하고 싶습니다.

 ``` OUT=$(docker images --format '{{.Repository}}:{{.Tag}}') OUTPUT=($OUT) docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar ```

설명:

먼저 OUT 은 모든 태그를 가져오지만 새 줄로 구분됩니다. 두 번째 OUTPUT 은 배열의 모든 태그를 가져옵니다. 세 번째 $(echo "${OUTPUT[*]}") 는 모든 이미지가 단일 tar에 있도록 docker save 명령에 대한 모든 태그를 넣습니다.

또한 gzip을 사용하여 압축할 수 있습니다. 대상에서 다음을 실행합니다.

 tar xvf images.tar.gz -O | docker load

tar -O 옵션 docker load 가져올 수 있는 내용을 stdin에 넣습니다.


Vikram

sshfs 사용할 수 있습니다.

 $ sshfs user@ip:/<remote-path> <local-mount-path> $ docker save <image-id> > <local-mount-path>/myImage.tar

Chu

Docker 저장 및 로드 기능을 수행하는 스크립트(시도 및 테스트):

도커 저장:

 #!/bin/bash #files will be saved in the dir 'Docker_images' mkdir Docker_images cd Docker_images directory=`pwd` c=0 #save the image names in 'list.txt' doc= docker images | awk '{print $1}' > list.txt printf "START \n" input="$directory/list.txt" #Check and create the image tar for the docker images while IFS= read -r line do one=`echo $line | awk '{print $1}'` two=`echo $line | awk '{print $1}' | cut -c 1-3` if [ "$one" != "<none>" ]; then c=$((c+1)) printf "\n $one \n $two \n" docker save -o $two$c'.tar' $one printf "Docker image number $c successfully converted: $two$c \n \n" fi done < "$input"

도커 로드:

 #!/bin/bash cd Docker_images/ directory=`pwd` ls | grep tar > files.txt c=0 printf "START \n" input="$directory/files.txt" while IFS= read -r line do c=$((c+1)) printf "$c) $line \n" docker load -i $line printf "$c) Successfully created the Docker image $line \n \n" done < "$input"

Syed Faraz Umar

실제 사례

 #host1 systemctl stop docker systemctl start docker docker commit -p 1d09068ef111 ubuntu001_bkp3 docker save -o ubuntu001_bkp3.tar ubuntu001_bkp3 #upload ubuntu001_bkp3.tar to my online drive aws s3 cp ubuntu001_bkp3.tar s3://mybucket001/ #host2 systemctl stop docker systemctl start docker cd /dir1 #download ubuntu001_bkp3.tar from my online drive aws s3 cp s3://mybucket001/ubuntu001_bkp3.tar /dir1 cat ./ubuntu001_bkp3.tar | docker load docker run --name ubuntu001 -it ubuntu001_bkp3:latest bash docker ps -a docker attach ubuntu001

quine9997

출처 : http:www.stackoverflow.com/questions/23935141/how-to-copy-docker-images-from-one-host-to-another-without-using-a-repository

반응형