Jak przenieść obraz Dockera z jednego komputera na inny bez korzystania z repozytorium, bez względu na to, czy jest ono prywatne czy publiczne?
Tworzę własny obraz w VirtualBox, a kiedy jest gotowy, staram się wdrożyć na innych komputerach, aby mieć rzeczywiste wykorzystanie.
Ponieważ jest oparty na moim własnym obrazie (takim jak Red Hat Linux), nie można go odtworzyć z pliku Docker. Mój plik dokerów nie jest łatwo przenośny.
Czy mogę użyć prostych poleceń? Lub inne rozwiązanie?
repo:tag
jako odwołania do obrazu niżimage id
. Jeśli użyjeszimage id
, załadowany obraz nie zachowa znacznika (i będziesz musiał zrobić kolejny krok, aby oznaczyć obraz).docker images
, a następnie użyjdocker tag DESIREDIMAGEID mycompany/myreponame
. Jeśli twój identyfikator obrazu to 591de551d6e4, możesz skrócić identyfikator obrazu:docker tag 59 mycompany/myreponame
Przesyłanie obrazu Docker przez SSH, bzipowanie zawartości w locie:
Dobrym pomysłem jest również umieszczenie
pv
na środku rury, aby zobaczyć, jak przebiega transfer:(Więcej na ten temat
pv
: strona główna , strony man ).źródło
docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) load
maszyny dokującej , możesz kopiować obrazy między maszynami mach1 i mach2 .eval $(docker-machine env dev)
jest dobry do ogólnej komunikacji z jednym hostem dokera, ale nie do kopiowania między dwoma komputerami, ponieważ dotyczy to dwóch różnych hostów / maszyn dokerów.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
. Bez przełącznika „-t” sudo narzeka na sudo: przepraszam, musisz mieć tty, aby uruchomić sudo ; z jednym „-t” jest to ta sama wiadomość, ponieważ ssh mówi, że Pseudo-terminal nie zostanie przydzielony, ponieważ stdin nie jest terminalem. i wreszcie, z dwoma „-t”, otrzymuję zawartość pliku tar (tj. obrazu) na moim terminalu. Jakieś pomysły?Aby zapisać obraz w dowolnej ścieżce pliku lub udostępnionym miejscu NFS, zobacz następujący przykład.
Uzyskaj identyfikator obrazu, wykonując:
Załóżmy, że masz obraz o identyfikatorze „dane-macierzy”.
Zapisz obraz z identyfikatorem:
Skopiuj obraz ze ścieżki do dowolnego hosta. Teraz zaimportuj do lokalnej instalacji Dockera, używając:
źródło
Najpierw zapisz obraz Dockera w pliku zip:
Następnie załaduj wyeksportowany obraz do Dockera za pomocą poniższego polecenia:
źródło
docker load < my-image.tar.gz
wystarczy. Obraz jest automatycznie dekompresowany dla gzip, bzip2 i xz.Biegać
aby zobaczyć listę obrazów na hoście. Załóżmy, że masz obraz o nazwie awesomesauce . W swoim terminalu
cd
do katalogu , do którego chcesz wyeksportować obraz. Teraz uruchom:Skopiuj plik tar na dysk USB lub cokolwiek, a następnie skopiuj go na nowy komputer hosta.
Teraz z nowego hosta wykonaj:
Teraz idź napić się kawy i przeczytaj Hacker News ...
źródło
docker save [image] -o file.tar
i,docker load -i file.tar
aby tego uniknąć!docker save [image] -o file.tar
wydaje się również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.źródło
cat my_container.tar | docker import - my_container:new
jeśli zostanie zaimportowane lokalnie zgodnie z pomocą cmdKorzystając z maszyny dokującej, możesz kopiować obrazy między maszynami
mach1
i zamach2
pomocą:I oczywiście możesz również trzymać
pv
się środka, aby uzyskać wskaźnik postępu:Możesz także pominąć jedną z
docker-machine config
podpowłok, aby użyć bieżącego domyślnego hosta dokera.skopiować obraz z bieżącego hosta dokera do
mach
lub
skopiować z
mach
bieżącego hosta dokera.źródło
Zakładam, że musisz zapisać,
couchdb-cartridge
który ma identyfikator obrazu 7ebc8510bc2c:Zapisz obraz archiveName w pliku tar. Użyję
/media/sf_docker_vm/
do zapisania obrazu.Skopiuj plik archiveName.tar do nowej instancji Docker użyciu dowolnej metody prace w środowisku, na przykład
FTP
,SCP
itdUruchom
docker load
polecenie na nowej instancji Docker i określ lokalizację pliku tar obrazu.Na koniec uruchom
docker images
polecenie, aby sprawdzić, czy obraz jest teraz dostępny.Proszę znaleźć ten szczegółowy post .
źródło
Aby przenieść obrazy z lokalnej instalacji Docker na maszynę wirtualną minikube:
źródło
docker-push-ssh
to narzędzie wiersza polecenia, które utworzyłem właśnie na ten scenariusz.Tworzy tymczasowy prywatny rejestr Docker na serwerze, ustanawia tunel SSH z lokalnego hosta, wypycha obraz, a następnie czyści po sobie.
Zaletą tego podejścia
docker save
(podczas pisania większości odpowiedzi przy użyciu tej metody) jest to, że tylko nowe warstwy są wypychane na serwer, co powoduje DUŻO szybsze przesyłanie.Często używanie rejestru pośredniego, takiego jak dockerhub, jest niepożądane i uciążliwe.
https://github.com/brthor/docker-push-ssh
Zainstalować:
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ć lokalnego hosta do
insecure_registries
konfiguracji Dockera . Uruchom narzędzie raz, a wyświetli się błąd informacyjny:Gdzie powinienem ustawić flagę „--insecure-register” w systemie Mac OS?
źródło
Wszystkie pozostałe odpowiedzi są bardzo pomocne. Właśnie przeszedłem przez ten sam problem i wymyśliłem prosty sposób
docker machine scp
.Od czasu Docker Machine v0.3.0 wprowadzono scp do kopiowania plików z jednego komputera Docker na inny. Jest to bardzo wygodne, jeśli chcesz skopiować plik z komputera lokalnego na zdalną maszynę Docker, taką jak AWS EC2 lub Digital Ocean, ponieważ Docker Machine dba o poświadczenia SSH.
Zapisz swoje zdjęcia za pomocą
docker save
:Skopiuj obrazy za pomocą narzędzia docker-machine scp
Załóżmy, że twój zdalny komputer Docker to
remote-machine
i katalog, w którym ma znajdować się plik tar/home/ubuntu
.Załaduj obraz Dockera
źródło
Chcę przenieść wszystkie obrazy z tagami.
Wyjaśnienie:
Najpierw
OUT
pobiera wszystkie tagi, ale oddziela je nowymi wierszami. DrugiOUTPUT
pobiera wszystkie tagi w tablicy. Trzeci$(echo "${OUTPUT[*]}")
umieszcza wszystkie tagi dla jednegodocker save
polecenia, dzięki czemu wszystkie obrazy są w jednym pliku tar.Dodatkowo można to skompresować za pomocą gzip. Na cel uruchom:
-O
opcjatar
umieszczania zawartości na standardowym interfejsie, którą można pobraćdocker load
.źródło
Możesz użyć
sshfs
:źródło
Skrypt do wykonywania funkcji zapisywania i ładowania Docker (wypróbowany i przetestowany):
Docker Save:
Obciążenie dokera:
źródło
Możesz użyć jedno-liniowej ze
DOCKER_HOST
zmienną:źródło