답변:
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 -o c:/myfile.tar centos:16
repo:tag
이미지 참조 로 사용 하는 것이 좋습니다 image id
. 을 사용 image id
하면로드 된 이미지에 태그가 유지되지 않으며 이미지에 태그를 지정하려면 다른 단계를 수행해야합니다.
docker images
한 다음을 사용하십시오 docker tag DESIREDIMAGEID mycompany/myreponame
. 이미지 ID가 591de551d6e4 인 경우 이미지 ID를 축약 할 수 있습니다.docker tag 59 mycompany/myreponame
SSH를 통해 Docker 이미지 전송, 즉석에서 컨텐츠를 압축 :
docker save <image> | bzip2 | \
ssh user@host 'bunzip2 | docker load'
pv
파이프 중간에 배치 하여 전송이 어떻게 진행되는지 확인하는 것도 좋습니다.
docker save <image> | bzip2 | pv | \
ssh user@host 'bunzip2 | docker load'
docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) load
시스템간에 이미지를 복사 할 수 있습니다 .
eval $(docker-machine env dev)
는 단일 도커 호스트와의 일반적인 통신에는 적합하지만 두 개의 도커 호스트 / 도커 시스템이 포함되므로 두 시스템간에 복사하지 않습니다.
ssh target_server 'docker save image:latest | bzip2' | pv | bunzip2 | docker load
docker save my_img:v1 | ssh -t -t my_user@my_machine sudo docker load
. "-t"스위치가 없으면 sudo는 sudo를 불평 합니다. 죄송합니다 . sudo를 실행하려면 tty가 있어야합니다 . ssh가 stdin이 터미널이 아니기 때문에 Pseudo-terminal이 할당되지 않는다고 말했기 때문에 하나의 "-t"로 동일한 메시지 입니다. 마지막으로 두 개의 "-t"를 사용하여 터미널에서 tar 파일의 내용 (예 : 이미지)을 얻습니다. 어떤 아이디어?
파일 경로 또는 공유 NFS 위치에 이미지를 저장하려면 다음 예를 참조하십시오.
다음을 수행하여 이미지 ID를 얻으십시오.
sudo docker images
ID가 "매트릭스-데이터"인 이미지가 있다고 가정 해보십시오.
id로 이미지를 저장하십시오.
sudo docker save -o /home/matrix/matrix-data.tar matrix-data
경로에서 호스트로 이미지를 복사하십시오. 이제 다음을 사용하여 로컬 Docker 설치로 가져옵니다.
sudo docker load -i <path to copied image file>
운영
docker images
호스트의 이미지 목록을 볼 수 있습니다. awesomesauce 라는 이미지가 있다고 가정 해 봅시다 . 터미널 cd
에서 이미지를 내보내려는 디렉토리로. 이제 다음을 실행하십시오.
docker save awesomesauce:latest > awesomesauce.tar
tar 파일을 썸 드라이브 등에 복사 한 다음 새 호스트 컴퓨터에 복사하십시오.
이제 새 호스트에서 다음을 수행하십시오.
docker load < awesomesauce.tar
이제 커피를 마시고 해커 뉴스를 읽으십시오 ...
docker save [image] -o file.tar
하고 docker load -i file.tar
이것을 피하십시오!
docker save [image] -o file.tar
또한 빠르고 격렬 것으로 보인다
docker-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-machine config
현재 기본 docker-host를 사용하기 위해 서브 쉘 중 하나를 생략 할 수도 있습니다 .
docker save <image> | docker $(docker-machine config <mach>) load
현재 docker-host에서 이미지를 복사 mach
또는
docker $(docker-machine config <mach>) save <image> | docker load
mach
현재 docker-host 에서 복사 합니다.
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 파일을 복사 FTP
, SCP
등
docker load
새 Docker 인스턴스 에서 명령을 실행하고 이미지 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
이 자세한 게시물을 찾으십시오 .
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
가장 큰 경고는 로컬 호스트를 Docker의 insecure_registries
구성 에 수동으로 추가해야한다는 것입니다 . 도구를 한 번 실행하면 유익한 오류가 발생합니다.
Error Pushing Image: Ensure localhost:5000 is added to your insecure registries.
More Details (OS X): /programming/32808215/where-to-set-the-insecure-registry-flag-on-mac-os
다른 모든 답변은 매우 유용합니다. 방금 같은 문제를 겪고와 함께 쉬운 방법을 알아 냈습니다 docker machine scp
.
Docker Machine v0.3.0 이후, 한 Docker 시스템에서 다른 시스템으로 파일을 복사하기 위해 scp가 도입되었습니다. 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
태그가있는 모든 이미지를 이동하고 싶습니다.
```
OUT=$(docker images --format '{{.Repository}}:{{.Tag}}')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
```
설명:
먼저 OUT
모든 태그를 가져 오지만 새 줄로 분리합니다. 두 번째 OUTPUT
는 배열의 모든 태그를 가져옵니다. 세 번째 는 모든 이미지가 단일 tar에 있도록 $(echo "${OUTPUT[*]}")
단일 docker save
명령 에 모든 태그를 넣습니다 .
또한 gzip을 사용하여 압축 할 수 있습니다. 대상에서 다음을 실행하십시오.
tar xvf images.tar.gz -O | docker load
-O
옵션을 사용 tar
하여 stdin에 내용 을 넣을 수 있습니다 docker load
.
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"