programing

저장소를 사용하지 않고 호스트 간에 도커 이미지를 복사하는 방법

sourcejob 2023. 9. 16. 08:58
반응형

저장소를 사용하지 않고 호스트 간에 도커 이미지를 복사하는 방법

개인 또는 공개에 관계없이 저장소를 사용하지 않고 한 컴퓨터에서 다른 컴퓨터로 도커 이미지를 전송하려면 어떻게 해야 합니까?

VirtualBox에서 이미지를 직접 만들고 이미지가 완성되면 실제 사용을 위해 다른 시스템에 배포하려고 합니다.

Red Hat Linux와 같이 내 자신의 기반 이미지를 기반으로 하므로 도커 파일에서 재생성할 수 없습니다.내 도커 파일은 쉽게 휴대할 수 없습니다.

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

도커 이미지를 타르 파일로 저장해야 합니다.

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

를 합니다 인 를 하여 에 를 과 에 합니다 하여 를 를 과 cp,scp, 아니면rsync(큰 파일의 경우 추가).)그런 다음 이미지를 도커에 로드해야 합니다.

docker load -i <path to image tar file>

예를 들어 -o로 파일 이름을 추가해야 합니다(디렉토리 뿐만 아니라).

docker save -o c:/myfile.tar centos:16

할 도 할 sudo모든 명령어.

SSH를 통해 도커 이미지를 전송하고 콘텐츠를 바로 압축하는 방법:

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

:docker load이미지 압축을 자동으로 해제합니다.를 지원합니다.gzip,bzip2그리고.xz.

를 넣는 것도 pv이송 상태를 확인하기 위해 파이프 중앙에 위치합니다.

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

(자세한 정보는 다음과 같습니다.pv: 홈페이지, 맨페이지).

  • 사용하다gzip/gunzip할 수 -- 는 10Mb/s 이상의 속도로 업로드할 수 있기 때문입니다.bzip할 수 것입니다,히리할수다을다을수n히할리t',h .gzip더 @ Steinbach @Thomas Steinbach Thomas Steinbach @Thomas Steinbach)

  • 사용하다xz네트워크 속도가 매우 느린 경우(예: 모바일 인터넷).xz는 더 비율을 합니다. 즉,은을다축더( (Thanks @jgmjgm).

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

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

docker images

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

ID를 사용하여 이미지를 저장합니다.

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

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

docker load -i <path to copied image file>

다음과 같은 원라이너를 사용할 수 있습니다.DOCKER_HOST변수:

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

먼저 도커 이미지를 압축 보관소에 저장합니다.

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

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

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

달려.

docker images

호스트의 이미지 목록을 봅니다.여러분이 멋진 소스라는 이미지를 가지고 있다고 가정해 보겠습니다.당신의 단말기에선cd이미지를 내보낼 디렉토리로 이동합니다.이제 실행:

docker save awesomesauce:latest > awesomesauce.tar

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

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

docker load < awesomesauce.tar

이제 가서 커피나 마시고 해커뉴스를 읽어보세요.

gzip 명령을 통해 도커 이미지를 저장하고 로드하는 가장 빠른 방법:

docker save <image_id> | gzip > image_file.tgz

다른 서버에 압축 이미지를 로드하려면 이 명령을 즉시 사용하면 압축 이미지로 인식됩니다.

docker load -i image_file.tgz

이미지 이름을 바꾸거나 이미지 태그를 다시 지정하려면 다음을 사용합니다.

docker image tag <image_id> <image_path_name>:<version>

예를 들어 다음과 같습니다.

docker image tag 4444444 your_docker_or_harbor_path/ubuntu:14.0

컨테이너의 파일 시스템을 평평하게 내보내려면 다음을 사용합니다.

docker export CONTAINER_ID > my_container.tar

사용하다cat my_container.tar | docker import -이미지를 가져올 수 있습니다.

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

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

이러한 은 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ docker save(작성 시 대부분의 답변이 이 방법을 사용하고 있음) 새 레이어만 서버로 푸시되어 업로드 속도가 훨씬 빨라집니다.

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

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' 플래그를 설정할 위치는 어디입니까?

도커 머신을 사용할 경우, 머신 간에 이미지를 복사할 수 있습니다.mach1그리고.mach2다음 항목 포함:

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-machine config현재 기본 도커-호스트를 사용하려면 하위 프로그램을 선택합니다.

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

현재 도커 호스트에서 이미지를 복사합니다.mach

아니면

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

에서 mach현재 도커 호스트로 전송할 수 있습니다.

제 생각에 당신은 그를 구해야 할 필요가 있습니다.couchdb-cartridge이미지 ID가 7ebc8510bc2c인 경우:

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

하는 메서드(예: archiveName.tar 에 Docker 을 Docker 하려면 합니다 를 하는 에서 합니다 를 하는 에 )를 사용합니다.FTP,SCP 기타, 기타.

더 실행docker load새 도커 인스턴스에 명령을 내리고 이미지 타르 파일의 위치를 지정합니다.

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

이 상세한 게시물을 찾아주시기 바랍니다.

모든 이미지를 저장하는 가장 좋은 방법은 다음과 같습니다.

docker save $(docker images --format '{{.Repository}}:{{.Tag}}') -o allimages.tar

를 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ,allimages.tar이미지를 로드하려면 이미지를 저장한 디렉토리로 이동하여 다음 명령을 실행합니다.

docker load -i allimages.tar

Commad 프롬프트가 아닌 PowerShell에서 이 명령을 사용해야 합니다.

실제 사례

#host1
systemctl stop docker
systemctl start docker
docker commit -p 1d09068ef111 ubuntu001_bkp3
#create backup
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

#restore backup
cat ./ubuntu001_bkp3.tar  | docker load
docker run --name ubuntu001 -it ubuntu001_bkp3:latest bash
docker ps -a
docker attach ubuntu001




로컬 도커 설치에서 미니큐브 VM으로 이미지를 전송하려면:

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

다른 모든 답변들은 매우 도움이 됩니다. 같은 도은고를할수는을다그h다yyitnt수dt도eemhe은할를docker machine scp.

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

  1. 을 사용하여 이미지 docker save 선택사항:

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

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

원격 도커 시스템이remote-machine는 tar 입니다./home/ubuntu.

  1. 도커 이미지 로드

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

윈도우즈 시스템에서 작업하고 다음과 같은 리눅스 시스템 명령에 업로드하는 경우

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

출력에 추가 문자를 추가하는 것처럼 보이기 때문에 파워셸을 사용하는 경우에는 작동하지 않습니다.cmd(명령 프롬프트)를 사용하여 명령을 실행하면 작동합니다.부수적으로 Chocolatey를 사용하여 gzip을 설치할 수 있으며 cmd에서 다음 사항도 작동합니다.

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

@kolipto의 대답에 근거하여, 이것은 나에게 아주 잘 맞았지만, 단지 그것과 함께.sudo도커 하중의 경우:

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

또는 pv가 없거나 설치하고 싶지 않은 경우:

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

수동으로 지퍼를 올리거나 비슷한 것을 할 필요가 없습니다.

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

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

설명:

첫번째 ㅇOUT새 행으로 구분된 모든 태그를 가져옵니다.두번째OUTPUT배열로 모든 태그를 가져옵니다.세번째$(echo "${OUTPUT[*]}")일를두다에 대해 모든 태그를 합니다.docker save명령을 실행하여 모든 이미지가 단일 타르로 표시되도록 합니다.

또한, 이것은 gzip을 사용하여 지퍼를 열 수 있습니다.대상에 대해 다음을 실행합니다.

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

-O한션션o 옵션tar stdin에 수 있습니다.docker load.

사용하셔도 좋습니다sshfs:

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

1. 레지스트리에서 이미지 또는 리포지토리를 꺼냅니다.

도커 당기기 [OPTIONS] NAME[:TAG|@DIGEST]

2. .tar 파일로 저장합니다.

도커 저장 [Options] IMAGE [IMAGE...]

예를 들어,

docker pull hello-world
docker save -o hello-world.tar hello-world

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

도커 저장:

#!/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"

언급URL : https://stackoverflow.com/questions/23935141/how-to-copy-docker-images-from-one-host-to-another-without-using-a-repository

반응형