সংগ্রহস্থল ব্যবহার না করে কীভাবে একটি হোস্ট থেকে অন্য হোস্টে ডকার চিত্রগুলি অনুলিপি করা যায়


1372

ব্যক্তিগত বা জনসাধারণ নির্বিশেষে কীভাবে আমি কোনও মজুতর থেকে অন্য মেশিনে কোনও ডকার চিত্র স্থানান্তর করব?

আমি ভার্চুয়ালবক্সে আমার নিজের ইমেজ তৈরি করি এবং এটি শেষ হয়ে গেলে আমি অন্যান্য মেশিনে বাস্তব ব্যবহারের জন্য স্থাপন করার চেষ্টা করি।

যেহেতু এটি আমার নিজস্ব ভিত্তিক চিত্রের উপর ভিত্তি করে (যেমন রেড হ্যাট লিনাক্স), তাই এটি ডকফায়াইল থেকে পুনরায় তৈরি করা যায় না। আমার ডকস্পাইল সহজে বহনযোগ্য নয়।

আমি কি ব্যবহার করতে পারি এমন কোন সহজ আদেশ আছে? নাকি আর কোন সমাধান?

উত্তর:


2301

আপনার ডকার চিত্রটি টાર ফাইল হিসাবে সংরক্ষণ করতে হবে:

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

তারপরে নিয়মিত ফাইল ট্রান্সফার সরঞ্জামগুলি সহ cp, scpবা rsync(বড় ফাইলগুলির জন্য পছন্দসই) আপনার নতুন চিত্রটিতে অনুলিপি করুন । এর পরে আপনাকে চিত্রটি ডকারে লোড করতে হবে:

docker load -i <path to image tar file>

PS: আপনার sudoসমস্ত কমান্ডের প্রয়োজন হতে পারে ।

সম্পাদনা: আপনার ফাইল-নাম (কেবল ডিরেক্টরি নয়) -ও সহ যুক্ত করা উচিত, উদাহরণস্বরূপ:

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

27
এটি চিত্রগুলির জন্য আরও ভাল উত্তর ।
অ্যান্ডি

26
এছাড়াও repo:tagচিত্রের রেফারেন্স হিসাবে ব্যবহার না করাই ভাল image id। আপনি যদি ব্যবহার করেন image id, লোড হওয়া চিত্র ট্যাগটি ধরে রাখবে না (এবং ছবিটি ট্যাগ করার জন্য আপনাকে আরও একটি পদক্ষেপ করতে হবে)।
উইসবাকি

1
আমি নামের পরিবর্তে চিত্র আইডিটি ব্যবহার করেছি: ট্যাগ এখন আমি এখানে বসে আছি, চিত্রটি লোড করেছি এবং রেপোজিটি এবং ট্যাগের জন্য <কোনও> নয়। নাম এবং ট্যাগ ফিরিয়ে আনার সঠিক উপায় কী? @ উইসবাকি
উলফেতনার

3
ট্যাগ করতে, প্রথমে পরিচয় ব্যবহার করে IMAGE আইডি ব্যবহার করুন docker images, তারপরে ব্যবহার করুন docker tag DESIREDIMAGEID mycompany/myreponame। আপনার চিত্রের আইডি যদি 591de551d6e4 হয় তবে আপনি চিত্রটির আইডি সংক্ষেপ করতে পারেন:docker tag 59 mycompany/myreponame
জুনিয়র মেহে


582

এসএইচএইচ এর মাধ্যমে একটি ডকার চিত্র স্থানান্তরিত করা, উড়ে যাওয়ার বিষয়বস্তুটি ঝাপটানো:

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

pvট্রান্সফারটি কীভাবে চলছে তা দেখার জন্য পাইপের মাঝখানে রাখা ভাল ধারণা :

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

(আরও তথ্য pv: হোম পৃষ্ঠা , ম্যান পৃষ্ঠা )।


19
ডকার-মেশিন ব্যবহার করার সময়, আপনি docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) loadমেশিনগুলি mach1 এবং mach2 এর মধ্যে চিত্রগুলি অনুলিপি করতে পারেন ।
matlehmann

5
@ মানোজল্ডগুলি eval $(docker-machine env dev)একটি একক ডকার হোস্টের সাথে সাধারণ যোগাযোগের জন্য ভাল তবে দুটি মেশিনের মধ্যে অনুলিপি না করা, যেহেতু এতে দুটি পৃথক ডকার হোস্ট / ডকার মেশিন রয়েছে।
matlehmann

14
বিপরীতে এটি করতে (স্থানীয় থেকে প্রত্যন্ত):ssh target_server 'docker save image:latest | bzip2' | pv | bunzip2 | docker load
থারস্মমনার

2
যখন ডাকারকে লক্ষ্য মেশিনে সুডোর প্রয়োজন হয় তখন এটি করার কোনও উপায় আছে? আমি চেষ্টা করেছি (সংকোচন ছাড়াই) docker save my_img:v1 | ssh -t -t my_user@my_machine sudo docker load। "-টি" স্যুইচ ছাড়াই sudo sudo অভিযোগ করে : দুঃখিত, sudo চালানোর জন্য আপনার অবশ্যই একটি tty থাকা উচিত ; একটি "-t" দিয়ে এটি একই বার্তা কারণ ssh বলে সিউডো-টার্মিনাল বরাদ্দ দেওয়া হবে না কারণ স্টিডিন টার্মিনাল নয়। এবং পরিশেষে, দুটি "-t" গুলি সহ, আমি আমার টার্মিনালে ট্যারি ফাইলের (যেমন চিত্র) সামগ্রী পাই। কোন ধারনা?
ক্ষুধা

1
@ জোসেফ স্টার্ক sudo থেকে "দুঃখিত" বার্তাটি থামানোর জন্য sudoers ফাইল সম্পাদনা করার সময় আমার "ডিফল্ট: <টার্গেট ব্যবহারকারীর নাম! প্রয়োজনীয়তা" যুক্ত করা দরকার ছিল আমি জানি না যে এটি কতটা পার্থক্য রাখে তবে আমি ব্যবহারকারী @ হোস্টের পরে উদ্ধৃতিতে সমস্ত কিছু রেখেছি (সুতরাং "[...] | এসএসএস ব্যবহারকারী @ হোস্ট 'বুঞ্জিপ 2 | সুডো ডকার লোড'")।
ভার্চুয়ালওয়ালফ

99

কোনও ফাইলের পাথ বা ভাগ করা এনএফএসের জায়গায় কোনও চিত্র সংরক্ষণ করতে নীচের উদাহরণটি দেখুন।

এর মাধ্যমে চিত্রের আইডি পান:

sudo docker images

বলুন আপনার কাছে "ম্যাট্রিক্স-ডেটা" আইডি সহ একটি চিত্র রয়েছে।

আইডি সহ চিত্রটি সংরক্ষণ করুন:

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

যে কোনও হোস্ট থেকে ছবিটি অনুলিপি করুন। এখন আপনার স্থানীয় ডকার ইনস্টলেশনটি ব্যবহার করে আমদানি করুন:

sudo docker load -i <path to copied image file>

34

প্রথমে একটি জিপ ফাইলে ডকার চিত্রটি সংরক্ষণ করুন:

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

তারপরে নিচের কমান্ডটি ব্যবহার করে রফতানি করা চিত্রটি ডকারে লোড করুন:

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

11
লোড করার জন্য, docker load < my-image.tar.gzযথেষ্ট। চিত্রটি gzip, bzip2 এবং xz এর জন্য স্বয়ংক্রিয়ভাবে সঙ্কুচিত হয়ে যায়।
ফ্লাক্স

32

চালান

docker images

হোস্টে চিত্রগুলির একটি তালিকা দেখতে। আসুন বলতে আপনি একটি ইমেজ নামের awesomesauce । আপনার টার্মিনালে, cdআপনি যে ডিরেক্টরিতে চিত্রটি রফতানি করতে চান সেখানে। এখন চালান:

docker save awesomesauce:latest > awesomesauce.tar

একটি থাম্ব ড্রাইভ বা যে কোনও কিছুতে টার ফাইলটি অনুলিপি করুন এবং তারপরে এটি নতুন হোস্ট কম্পিউটারে অনুলিপি করুন।

এখন নতুন হোস্ট থেকে করুন:

docker load < awesomesauce.tar

এখন একটি কফি পান এবং হ্যাকার নিউজ পড়ুন ...


4
এখানে লক্ষণীয় যে এগুলি কেবল তখনই কার্যকর হবে যদি একই ওএসে সেভ এবং লোড কার্যকর করা হয়। এটি ব্যবহার করুন docker save [image] -o file.tarএবং docker load -i file.tarএড়াতে!
Andreas Forslöw

docker save [image] -o file.tarএছাড়াও
তীব্রভাবে

19

ধারকটির ফাইল সিস্টেমের সমতল রফতানির জন্য, ব্যবহার করুন;

docker export CONTAINER_ID > my_container.tar

cat my_container.tar | docker import -চিত্রটি আমদানি করতে ব্যবহার করুন ।


9
cat my_container.tar | docker import - my_container:newস্থানীয়ভাবে আমদানি যদি সেমিডি সহায়তা অনুসারে হয় তবে তা হবে
ল্যারি

7
এটি কোনও চিত্র মোতায়েনের চেয়ে চলমান ধারকটির ব্যাক আপ করার জন্য আরও বেশি।
কাউশা

15

ডকার-মেশিন ব্যবহার করার সময়, আপনি মেশিনগুলির মধ্যে 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বর্তমান ডকার-হোস্ট থেকে অনুলিপি করতে।


10

আমি ধরে নিলাম আপনার সংরক্ষণ করতে হবে couchdb-cartridgeযা 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

আর্কাইভনাম চিত্রটি একটি টાર ফাইলে সংরক্ষণ করুন। আমি /media/sf_docker_vm/ছবিটি সংরক্ষণ করতে ব্যবহার করব ।

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

উদাহরণস্বরূপ আপনার পরিবেশে যাই হোক না কেন পদ্ধতি কাজ ব্যবহার করার আপনার নতুন Docker ক্ষেত্রটিকেই archiveName.tar ফাইল অনুলিপি করুন, 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

দয়া করে এই বিস্তারিত পোস্টটি সন্ধান করুন


10

আপনার স্থানীয় ডকার ইনস্টলেশন থেকে একটি মিনিক्यूब ভিএম-তে চিত্র স্থানান্তর করতে:

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

10

docker-push-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): /programming/32808215/where-to-set-the-insecure-registry-flag-on-mac-os

কোথায় আমি ম্যাক ওএস-এ '--insecure-registry' পতাকা সেট করব?


1
আপনার উত্তরটি সম্পাদনা করে এটিকে স্পষ্ট করতে যে আপনি প্রস্তাবিত ইউটিলিটিটি আপনি তৈরি করেছেন। এই পৃষ্ঠাটি দেখুন , বিশেষত: "ভাল, প্রাসঙ্গিক উত্তরগুলি পোস্ট করুন এবং যদি কিছু (তবে সমস্ত নাও) আপনার পণ্য বা ওয়েবসাইট সম্পর্কে হয় তবে তা ঠিক আছে However তবে আপনাকে অবশ্যই উত্তরগুলিতে আপনার অনুমোদিততা প্রকাশ করতে হবে।"
লুই

8

অন্যান্য সমস্ত উত্তর খুব সহায়ক। আমি ঠিক একই সমস্যার মধ্য দিয়ে গিয়েছিলাম এবং এর সাথে একটি সহজ উপায় বের করেছি docker machine scp

যেহেতু ডকার মেশিন v0.3.0, একটি ডকার মেশিন থেকে অন্যটিতে ফাইল অনুলিপি করতে scp চালু হয়েছিল। এটি যদি আপনার স্থানীয় কম্পিউটার থেকে কোনও দূরবর্তী ডকার মেশিনে যেমন ডাব্লুএস ইসি 2 বা ডিজিটাল মহাসাগরে অনুলিপি করতে চান তবে এটি খুব সুবিধাজনক কারণ ডকার মেশিন আপনার জন্য এসএসএইচ শংসাপত্রের যত্ন নিচ্ছে।

  1. আপনার ব্যবহার করে ছবিগুলি সংরক্ষণ করুন docker save:

    docker save -o docker-images.tar app-web
    
  2. ডকার-মেশিন স্ক্যাপ ব্যবহার করে ছবিগুলি অনুলিপি করুন

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

আপনার রিমোটের Docker মেশিন ধরে হয় remote-machineএবং ডিরেক্টরিটি আপনি আলকাতরা ফাইল হতে করতে চান /home/ubuntu

  1. ডকার চিত্রটি লোড করুন

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

5
শুধু 'স্কিপ <সোর্স> <রেটে>> কেন নয়?
তামাস কলম্যান

3

আমি সমস্ত ছবি ট্যাগ সহ সরাতে চাই।

```
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

-Otarস্ট্যান্ডিনে সামগ্রী রাখার বিকল্প যা দখল করতে পারে docker load


2

আপনি ব্যবহার করতে পারেন sshfs:

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

1

ডকার সেভ এবং লোড ফাংশন সম্পাদনের স্ক্রিপ্ট (চেষ্টা ও পরীক্ষিত):

ডকার সংরক্ষণ:

#!/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"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.