저장소를 사용하지 않고 호스트 간에 도커 이미지를 복사하는 방법
개인 또는 공개에 관계없이 저장소를 사용하지 않고 한 컴퓨터에서 다른 컴퓨터로 도커 이미지를 전송하려면 어떻게 해야 합니까?
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과 같은 원격 도커 시스템으로 파일을 복사하려는 경우 매우 편리합니다.
을 사용하여 이미지
docker save선택사항:docker save -o docker-images.tar app-web-
docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
원격 도커 시스템이remote-machine는 tar 입니다./home/ubuntu.
도커 이미지 로드
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
'programing' 카테고리의 다른 글
| m이 3x3 행렬일 때 m[1] - m[0]이 3을 반환하는 이유는 무엇입니까? (0) | 2023.09.16 |
|---|---|
| 폭 100% HTML 테이블, tbody 안에 세로 스크롤 포함 (0) | 2023.09.16 |
| XML에서 잘못된 문자는 무엇입니까? (0) | 2023.09.16 |
| 판다 왼쪽 바깥쪽 조인 결과 왼쪽 테이블보다 큰 테이블이 나타남 (0) | 2023.09.16 |
| 문자열에서 텍스트 추출 (0) | 2023.09.16 |