ගබඩාවක් භාවිතා නොකර ඩෝකර් පින්තූර එක් ධාරකයකින් තවත් ධාරකයකට පිටපත් කරන්නේ කෙසේද


1424

පුද්ගලික හෝ පොදු වුවත්, ගබඩාවක් භාවිතා නොකර ඩොකර් රූපයක් එක් යන්ත්‍රයකින් තවත් යන්ත්‍රයකට මාරු කරන්නේ කෙසේද?

මම වර්චුවල් බොක්ස් හි මගේම ප්‍රතිරූපයක් නිර්මාණය කරමි, එය අවසන් වූ පසු සැබෑ භාවිතය සඳහා වෙනත් යන්ත්‍ර වෙත යෙදවීමට උත්සාහ කරමි.

එය මගේම පදනම් වූ රූපයක් මත පදනම් වී ඇති හෙයින් (Red Hat Linux වැනි), එය ඩොකර් ෆයිල් එකකින් ප්‍රතිනිර්මාණය කළ නොහැක. මගේ ඩොකර් ෆයිල් පහසුවෙන් අතේ ගෙන යා නොහැක.

මට භාවිතා කළ හැකි සරල විධානයන් තිබේද? නැත්නම් වෙනත් විසඳුමක්ද?

Answers:


2399

ඔබට ඩොකර් රූපය තාර ගොනුවක් ලෙස සුරැකීමට අවශ්‍ය වනු ඇත:

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

ඉන්පසු ඔබේ රූපය නව පද්ධතියකට පිටපත් කරන්න cp, scpහෝ rsync(විශාල ගොනු සඳහා වඩාත් සුදුසු) වැනි සාමාන්‍ය ගොනු හුවමාරු මෙවලම් සමඟ . ඊට පසු ඔබට රූපය ඩෝකර් වෙත පැටවීමට සිදුවේ:

docker load -i <path to image tar file>

PS: ඔබට sudoසියලු විධානයන් අවශ්‍ය විය හැකිය .

සංස්කරණය කරන්න: ඔබ -o සමඟ ගොනු නාමය (නාමාවලිය පමණක් නොවේ) එකතු කළ යුතුය, උදාහරණයක් ලෙස:

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

28
රූප සඳහා වඩා හොඳ පිළිතුර මෙයයි .
ඇන්ඩි

29
එසේම, repo:tagරූප යොමුව ලෙස භාවිතා කිරීම වඩා හොඳය image id. ඔබ භාවිතා කරන්නේ නම් image id, පටවන ලද රූපය ටැගය රඳවා නොගනී (රූපය ටැග් කිරීමට ඔබට තවත් පියවරක් කිරීමට සිදුවේ).
wisbucky

1
නම වෙනුවට මම රූප හැඳුනුම්පත භාවිතා කළෙමි: ටැගය දැන් මම මෙහි වාඩි වී, රූපය පටවා REPOSITORY සහ TAG සඳහා <none> ඇත. නම සහ ටැගය නැවත ගෙන ඒමට නිවැරදි ක්‍රමය කුමක්ද? is විස්බකි
උල්ෆෙට්නර්

3
ටැග් කිරීමට, පළමුව IMAGE ID භාවිතා කර අනන්‍යතාවය භාවිතා කරන්න docker images, පසුව භාවිතා කරන්න docker tag DESIREDIMAGEID mycompany/myreponame. ඔබගේ රූප හැඳුනුම්පත 591de551d6e4 නම්, ඔබට රූප හැඳුනුම්පත කෙටියෙන් දැක්විය හැකිය:docker tag 59 mycompany/myreponame
කනිෂ් May

Nd ඇන්ඩිජේ දෙස බලන්න ඩොකර් පින්තූර එක්
duct_tape_coder

593

SSH හරහා ඩෝකර් රූපයක් මාරු කිරීම, පියාසර කරන අන්තර්ගතය bzipping:

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යන්ත්‍ර යන්ත්‍ර 1 සහ මැච් 2 අතර රූප පිටපත් කිරීමට ඔබට කළ හැකිය .
matlehmann

5
eval $(docker-machine env dev)තනි ඩොකර් ධාරකයෙකු සමඟ සාමාන්‍ය සන්නිවේදනය සඳහා @manojlds හොඳ නමුත් යන්ත්‍ර දෙකක් අතර පිටපත් නොකිරීමට මෙය හේතු වේ.
matlehmann

15
මෙය ආපසු හැරවීමට (දුරස්ථව ප්‍රාදේශීයයට):ssh target_server 'docker save image:latest | bzip2' | pv | bunzip2 | docker load
ThorSummoner

2
ඉලක්කගත යන්ත්‍රයේ ඩොකර්ට සුඩෝ අවශ්‍ය වූ විට මෙය කිරීමට ක්‍රමයක් තිබේද? මම උත්සාහ කළා (සම්පීඩනයකින් තොරව) docker save my_img:v1 | ssh -t -t my_user@my_machine sudo docker load. "-T" ස්විචය නොමැතිව, sudo පැමිණිලි කරන්නේ sudo: සමාවන්න, ඔබට sudo ධාවනය කිරීමට tty එකක් තිබිය යුතුය ; එක් "-t" එකකින් එකම පණිවිඩය වන්නේ ස්ටෑඩින් ටර්මිනලය නොවන නිසා ව්‍යාජ පර්යන්තය වෙන් නොකරන බවයි. අවසාන වශයෙන්, "-t" s දෙකක් සමඟ, මගේ ටර්මිනලයට තාර ගොනුවේ අන්තර්ගතය (එනම් රූපය) ලැබේ. අදහස් තිබේද?
කුසගින්න

1
Ose ජොසෙෆ්ස්ටාර්ක් සුඩෝ වෙතින් "කණගාටුයි" පණිවිඩය නැවැත්වීම සඳහා සුඩෝ ගොනුව සංස්කරණය කිරීමේදී "පෙරනිමි: <ඉලක්ක පරිශීලක නාමය>! අවශ්‍යතාවය" එක් කිරීමට මට අවශ්‍ය විය. එයින් කොපමණ වෙනසක් සිදු වේදැයි මම නොදනිමි, නමුත් මම පරිශීලකයා @ ධාරකයට පසුව සෑම දෙයක්ම මිල ගණන් යටතේ තබමි (එබැවින් "[...] | ssh user @ host 'bunzip2 | sudo docker load'").
VirtualWolf

100

පින්තූරයක් ඕනෑම ගොනු මාර්ගයකට හෝ හවුල් NFS ස්ථානයකට සුරැකීමට පහත උදාහරණය බලන්න.

කිරීමෙන් රූප හැඳුනුම්පත ලබා ගන්න:

sudo docker images

ඔබට "matrix-data" හැඳුනුම්පතක් ඇති බව පවසන්න.

රූපය id සමඟ සුරකින්න:

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

රූපය ඕනෑම ධාරකයෙකුට මාර්ගයෙන් පිටපත් කරන්න. දැන් ඔබේ දේශීය ඩොකර් ස්ථාපනය වෙත ආයාත කරන්න:

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

36

පළමුව ඩොකර් රූපය zip ගොනුවකට සුරකින්න:

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

පහත දැක්වෙන විධානය භාවිතා කර අපනයනය කළ රූපය ඩෝකර් වෙත පටවන්න:

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

13
පැටවීම සඳහා, docker load < my-image.tar.gzප්රමාණවත්ය. Gzip, bzip2, සහ xz සඳහා රූපය ස්වයංක්‍රීයව විසංයෝජනය වේ.
ෆ්ලක්ස්

33

දුවන්න

docker images

ධාරකයේ ඇති පින්තූර ලැයිස්තුවක් බැලීමට. අපි ඔබට awesomesauce නමින් රූපයක් ඇති බව කියමු . ඔබේ පර්යන්තය තුළ, cdඔබට රූපය අපනයනය කිරීමට අවශ්‍ය නාමාවලියට. දැන් ධාවනය කරන්න:

docker save awesomesauce:latest > awesomesauce.tar

තාර ගොනුව මාපට ඇඟිල්ලකට හෝ වෙනත් දෙයකට පිටපත් කර නව ධාරක පරිගණකයට පිටපත් කරන්න.

දැන් නව සත්කාරක සමාගමෙන් කරන්න:

docker load < awesomesauce.tar

දැන් ගිහින් කෝපි එකක් අරගෙන හැකර් ප්‍රවෘත්ති කියවන්න ...


5
මෙහි සඳහන් කිරීම වටී, මෙය ක්‍රියාත්මක වන්නේ එකම මෙහෙයුම් පද්ධතියේ සුරැකීම සහ පැටවීම ක්‍රියාත්මක කළහොත් පමණි. භාවිතා docker save [image] -o file.tarසහ docker load -i file.tarපිළිෙවළ!
ඇන්ඩ්‍රියාස් ෆෝර්ස්ලෝ

docker save [image] -o file.tarඑය ද වේගවත් බව පෙනේ
ti7

19

බහාලුම් ගොනු පද්ධතියක් සමතලා කිරීම සඳහා, භාවිතා කරන්න;

docker export CONTAINER_ID > my_container.tar

cat my_container.tar | docker import -ඉහත රූපය ආයාත කිරීමට භාවිතා කරන්න .


9
cat my_container.tar | docker import - my_container:newcmd උදව් අනුව දේශීයව ආනයනය කරන්නේ නම් එය විය යුතුය
ලැරී කායි

7
පින්තූරයක් යෙදවීමට වඩා ධාවනය වන බහාලුමක් උපස්ථ කිරීම සඳහා මෙය වැඩි ය.
කෞෂා

15

Docker-යන්ත්රය භාවිතා කරන විට, ඔබ යන්ත්ර අතර රූප පිටපත් කිරීමට ඔබ හට හැකිය 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-cartridge7ebc8510bc2c හි රූප හැඳුනුම්පතක් ඇති ඔබ සුරැකීමට අවශ්‍ය යැයි මම සිතමි:

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ඔබගේ නව Docker උදාහරණයක් මත විධානය සහ ප්රතිරූපය තාර ගොනුවේ පිහිටීම නියම කරන්න.

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 මෙම අවස්ථාව සඳහා මා විසින් නිර්මාණය කරන ලද විධාන රේඛා උපයෝගීතාවයකි.

එය සේවාදායකයේ තාවකාලික පෞද්ගලික ඩොකර් ලේඛනයක් සකසයි, ඔබේ දේශීය හොස්ට් වෙතින් 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
ඔබ නිර්දේශ කරන උපයෝගීතාව ඔබ විසින් නිර්මාණය කරන ලද්දක් බව පැහැදිලි කිරීම සඳහා මම ඔබේ පිළිතුර සංස්කරණය කළෙමි. බලන්න මෙම පිටුව "පසු හොඳ, අදාළ පිළිතුරු, සහ සමහර නම් (නමුත් සියලු) හරි බව ඔබේ භාණ්ඩය හෝ වෙබ් අඩවියක්, ගැන විය සිදු කෙසේ වෙතත්, ඔබ ඔබේ පිළිතුරු ඔබේ සිටියෝ අනාවරණය කළ යුතුය..": විශේෂයෙන්,
ලුවී

8

අනෙක් සියලුම පිළිතුරු ඉතා ප්‍රයෝජනවත් වේ. මම එකම ගැටලුවකට මුහුණ දී පහසු ක්‍රමයක් හදුනා ගතිමි docker machine scp.

ඩෝකර් මැෂින් v0.3.0 සිට, එක් ඩොකර් යන්ත්‍රයකින් තවත් පරිගණකයකට ගොනු පිටපත් කිරීම සඳහා scp හඳුන්වා දෙන ලදි. ඔබේ දේශීය පරිගණකයෙන් AWS EC2 හෝ ඩිජිටල් සාගර වැනි දුරස්ථ ඩොකර් යන්ත්‍රයකට ගොනුවක් පිටපත් කිරීමට අවශ්‍ය නම් මෙය ඉතා පහසු වේ, මන්ද ඩොකර් යන්ත්‍රය ඔබ වෙනුවෙන් SSH අක්තපත්‍ර ගැන සැලකිලිමත් වන බැවිනි.

  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සහ තාර ගොනුව වීමට අවශ්‍ය නාමාවලිය යැයි උපකල්පනය කරන්න /home/ubuntu.

  1. ඩෝකර් රූපය පූරණය කරන්න

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

5
'scp <source> <remote>' පමණක් නොවන්නේ ඇයි?
ටමාස් කල්මන්

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උදුරා ගත හැකි stdin මත අන්තර්ගතය තැබීමේ විකල්පය docker load.


2

ඔබට භාවිතා කළ හැකිය sshfs:

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

2

ඔබට DOCKER_HOSTවිචල්‍යය සහිත එක් ලයිනර් භාවිතා කළ හැකිය :

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

මෙය නියත වශයෙන්ම මා සොයන ආ command ාවයි, මෙම පිළිතුරට වැඩි ප්‍රේමයක් ලැබිය යුතු යැයි මම සිතමි
ෆ්‍රැන්කොයිස්

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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.