질문자 :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
DaiweiSSH를 통해 Docker 이미지 전송, 즉석에서 콘텐츠 압축:
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
에 대한 추가 정보: 홈 페이지 , 매뉴얼 페이지 ).
@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
DamodaranDOCKER_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 Moustafellosdocker-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' 플래그를 어디에서 설정해야 합니까?
brthornburydocker-machine을 사용할 때 다음을 사용하여 머신 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-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 시스템으로 파일을 복사하려는 경우 매우 편리합니다.
다음과 같이 docker save
사용하여 이미지를 저장합니다.
docker save -o docker-images.tar app-web
docker-machine scp를 사용하여 이미지 복사
docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
원격 Docker 시스템이 remote-machine
이고 tar 파일이 있어야 하는 디렉토리가 /home/ubuntu
합니다.
도커 이미지 로드
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에 넣습니다.
Vikramsshfs
사용할 수 있습니다.
$ sshfs user@ip:/<remote-path> <local-mount-path> $ docker save <image-id> > <local-mount-path>/myImage.tar
ChuDocker 저장 및 로드 기능을 수행하는 스크립트(시도 및 테스트):
도커 저장:
#!/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