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.
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ń.
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 ).
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>
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
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 ...
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.
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.
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.
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.
-
Zapisz obrazy za pomocą
docker save
like:docker save -o docker-images.tar app-web
-
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
.
-
Załaduj obraz dokera
docker-machine ssh remote-machine sudo docker load -i docker-images.tar
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)
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
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
.
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.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?
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
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 .
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.
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