Jak skopiować obrazy dokera z Jednego Hosta do drugiego bez użycia repozytorium

Jak przenieść obraz dokera z jednego komputera na drugi bez korzystania z repozytorium, bez względu na to, czy jest to prywatne czy publiczne?

Jestem przyzwyczajony do grania i tworzenia własnego obrazu w VirtualBox, a kiedy to się skończy, staram się wdrożyć na innych komputerach, aby mieć realne wykorzystanie.

Ponieważ jest on oparty na własnym obrazie (jak Red Hat Linux), nie można go odtworzyć z pliku Dockerfile.

Czy są proste polecenia, których mogę użyć? Albo inne rozwiązanie?

Wydaje się, że save / export może osiągnąć podobny cel, Zobacz Jaka jest różnica między save a export w Dockerze?, a ja wolę polecenie save dla mojej sprawy.

 778
Author: Peter Mortensen, 2014-05-29

16 answers

Będziesz musiał zapisać obraz dokera jako plik tar:

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

Następnie skopiuj obraz do nowego systemu za pomocą zwykłych narzędzi do przesyłania plików, takich jak cp lub scp. Następnie będziesz musiał załadować obraz do Dockera:

docker load -i <path to image tar file>

PS: możesz potrzebować sudo wszystkich poleceń.

 1384
Author: Daiwei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 17:11:53

Przesyłanie obrazu dokera przez SSH, bzipowanie zawartości w locie:

docker save <image> | bzip2 | \
     ssh user@host 'bunzip2 | docker load'
Dobrze jest też umieścić pv na środku rury, aby zobaczyć, jak idzie transfer:
docker save <image> | bzip2 | pv | \
     ssh user@host 'bunzip2 | docker load'

(Więcej informacji o pv: Strona główna, man page ).

 399
Author: kolypto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-22 15:08:59

Aby zapisać obraz w dowolnej ścieżce do pliku lub udostępnionym miejscu NFS, zobacz poniższy przykład.

Uzyskaj ID obrazu wykonując:

sudo docker images

Powiedzmy, że masz obraz o id "matrix-data".

Zapisz obrazek o id:

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

Skopiuj obraz ze ścieżki do dowolnego hosta. Teraz zaimportuj do lokalnej instalacji dokera używając:

sudo docker load -i <path to copied image file>
 75
Author: Sohan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 17:18:54

Najpierw Zapisz obraz dokera do pliku zip:

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

Następnie załaduj wyeksportowany obraz do Dockera za pomocą poniższego polecenia:

zcat <docker image name>.tar.gz | docker load
 19
Author: Damodaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 17:22:24

Run

docker images

Aby zobaczyć listę obrazów na serwerze. Załóżmy, że masz obraz o nazwie awesomesauce . W Terminalu, cd do katalogu, do którego chcesz wyeksportować obraz. Teraz uruchom:

docker save awesomesauce:latest > awesomesauce.tar

Skopiuj plik tar na pendrive lub cokolwiek innego, a następnie skopiuj go na nowy komputer.

Teraz z nowego hosta do:

docker load < awesomesauce.tar

A teraz idź na kawę i przeczytaj wiadomości hakerskie ...

 13
Author: Neil Girardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 17:24:00

Do spłaszczonego eksportu systemu plików kontenera, użyj;

docker export CONTAINER_ID > my_container.tar

Użyj cat my_container.tar | docker import -, Aby zaimportować wspomniany obraz.

 12
Author: Panagiotis Moustafellos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 14:32:32

Podczas używania docker-machine, można wykonać docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load kopiowanie obrazów pomiędzy maszynami mach1 i mach2.

I oczywiście możesz również trzymać pv w środku, aby uzyskać wskaźnik progess:

docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load.

Możesz również pominąć jedną z powłok podrzędnych docker-machine config, aby użyć aktualnego domyślnego hosta dokującego.

docker save <image> | docker $(docker-machine config <mach>) load aby skopiować obraz z bieżącego Docker-hosta do mach

Lub

docker $(docker-machine config <mach>) save <image> | docker load kopiowanie z mach do bieżącego Docker-hosta.

 11
Author: matlehmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-14 09:53:06

Zakładam, że musisz zapisać couchdb-cartridge, który ma ID obrazu 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

Zapisz obraz nazwy archiwum do pliku tar. Użyję /media/sf_docker_vm/, aby zapisać obraz.

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

Skopiuj nazwę archiwum.plik tar do nowej instancji Dockera przy użyciu dowolnej metody działającej w Twoim środowisku, na przykład FTP, SCP, itd.

Uruchom polecenie docker load na nowej instancji dokera i określ lokalizację pliku TAR obrazu.

stratos@Dev-PC:~$ docker load < /media/sf_docker_vm/archiveName.tar

Wreszcie Uruchom docker images polecenie sprawdzające, czy obraz jest teraz dostępny.

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

Proszę znaleźć ten szczegółowy post.

 8
Author: tk_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 17:14:17

Wszystkie inne odpowiedzi są bardzo pomocne. Po prostu przeszedłem przez ten sam problem i wymyśliłem łatwy sposób z docker machine scp.

Od wersji Docker Machine v0.3.0, scp został wprowadzony do kopiowania plików z jednej maszyny Docker do drugiej. Jest to bardzo wygodne, jeśli chcesz skopiować plik z lokalnego komputera na zdalną maszynę dokującą, taką jak AWS EC2 lub Digital Ocean, ponieważ Docker Machine dba o poświadczenia SSH.

  1. Zapisz obrazy za pomocą docker save like:

    docker save -o docker-images.tar app-web
    
  2. Kopiowanie obrazów za pomocą docker-machine scp

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

Załóżmy, że Twój zdalny Docker to remote-machine, A katalog, w którym ma być plik tar to /home/ubuntu.

  1. Załaduj obraz dokera

    docker-machine ssh remote-machine sudo docker load -i docker-images.tar
    
 6
Author: Peng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 17:20:26

Aby przesłać obrazy z lokalnej instalacji dokera do maszyny wirtualnej minikube:

docker save <image> | (eval $(minikube docker-env) && docker load)
 6
Author: Bryan Larsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 18:01:18

Możesz użyć sshfs:

$ sshfs user@ip:/<remote-path> <local-mount-path>
$ docker save <image-id> > <local-mount-path>/myImage.tar
 0
Author: Chu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-04 03:41:10

Chcę przenieść wszystkie obrazy z tagami.

```
OUT=$(docker images --format '{{.Repository}}:{{.Tag}}')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
``` 

Wyjaśnienie:

Pierwszy OUT pobiera wszystkie znaczniki, ale oddzielone nowymi liniami. Drugi OUTPUT pobiera wszystkie znaczniki w tablicy. Trzeci $(echo "${OUTPUT[*]}") umieszcza wszystkie znaczniki dla pojedynczej komendy docker save tak, że wszystkie obrazy są w jednym tar.

Dodatkowo można go zamocować za pomocą gzip. Na cel, run:

tar xvf images.tar.gz -O | docker load

-O opcja tar umieszcza zawartość na stdin, którą można przechwycić przez docker load.

 0
Author: Vikram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-06 21:01:06

W ten sposób można przenosić obrazy Dockera pomiędzy dwoma zdalnymi rejestrami/repozytoriami. Działa z Dockerem w wersji 1.10.2, build c3959b1.

docker pull source-registry.com/myProject/myImageName:1.0.0
docker tag source-registry.com/myProject/myImageName:1.0.0 target-remote-registry.com/myProject/myImageName:1.0.0
docker push target-remote-registry.com/myProject/myImageName:1.0.0
Jest to przydatna metoda, jeśli chcesz przenieść swoje obrazy do usługi AWS ECS / ECR.
 0
Author: maestr0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 17:21:13

docker-push-ssh jest narzędziem wiersza poleceń tylko dla tego scenariusza.

Ustawia tymczasowy prywatny rejestr Dokerów na serwerze, ustanawia tunel SSH z twojego lokalnego hosta, popycha Twój obraz, a następnie oczyszcza się po sobie.

Zaletą tego podejścia w stosunku do docker save (w momencie pisania większości odpowiedzi używa tej metody) jest to, że tylko nowe warstwy są wypychane na serwer, co powoduje znacznie szybsze przesyłanie.

Często używając rejestru pośredniego, jak dockerhub jest niepożądany i uciążliwy.

Https://github.com/coherenceapi/docker-push-ssh

Zainstaluj:

pip install docker-push-ssh

Przykład:

docker-push-ssh -i ~/my_ssh_key [email protected] my-docker-image

Największym zastrzeżeniem jest to, że musisz ręcznie dodać swój localhost do konfiguracji Dockera insecure_registries. Uruchom narzędzie raz, a pojawi się błąd informacyjny:

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

gdzie należy ustawić flagę '-- insecure-registry ' w systemie Mac OS?

 0
Author: brthornbury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 18:59:54

Po pierwsze, Docker images (Docker images) są dostępne za pośrednictwem Docker images hub (lub użyj poprzedniej metody do eksportu). Przy okazji, jeśli szukasz sposobu na przeniesienie lub skopiowanie kontenera Dockera ( Docker ps-a). Możliwe rozwiązanie polega na użyciu następującego polecenia:

docker container export [options] CONTAINER ID -o given-name.tar

Na przykład:

docker ps -a

Przykładowe wyjście

docker container export cf54f5423a66 -o cf54f5423a66.tar

Dzięki temu możesz zachować zmiany w następnym wdrożeniu. Aby uzyskać więcej informacji, zapoznaj się z strona dokumentacji Dockera .

 -1
Author: Esmaeil Mirzaee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 18:57:21

Myślę, że najlepszym rozwiązaniem byłoby zalogowanie się do Docker Hub i wciśnięcie tam obrazka.

Pierwsza część nazwy Twojego obrazka (przed ukośnikiem) powinna odpowiadać Twojemu nicku na Docker Hub, druga część to żądana nazwa aplikacji i znacznik (wersja).

Wynik: brilliance643 / nagios: finalv

Wynik: będziesz mógł uzyskać dostęp do swojego obrazu tylko przez

$docker run -ti -d brilliance643/nagios:finalv

Z dowolnej części wszechświata.

 -4
Author: Mykola Pelyp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 10:41:09