Как скопировать изображения Docker с одного хоста на другой без использования репозитория



Как перенести изображение Docker с одной машины на другую без использования репозитория, независимо от того, является ли он частным или общедоступным?



Я привык играть и создавать свой собственный образ в VirtualBox, и когда он закончен, я пытаюсь развернуть на других машинах, чтобы иметь реальное использование.



поскольку он основан на собственном образе (например, Red Hat Linux), его нельзя воссоздать из файла Dockerfile.



есть ли простые команды я могу использовать? Или другой решение?



Это, кажется, сохранить/экспортировать можно добиться аналогичного назначения, см. в чем разница между сохранением и экспортом в Docker?, а я предпочитаю для моего случая.

541   16  

16 ответов:

вам нужно будет Сохранить Изображение Докера в виде файла tar:

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

затем скопируйте изображение в новую систему с помощью обычных инструментов передачи файлов, таких как cp или scp. После этого вам придется загрузить изображение в Docker:

docker load -i <path to image tar file>

PS: Вам может понадобиться sudo все команды.

передача изображения Docker через 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:Домашняя страница,на странице).

чтобы сохранить изображение в любой путь к файлу или общее место NFS см. Следующий пример.

получить идентификатор образ:

sudo docker images

скажем, у вас есть изображение с идентификатором "matrix-data".

Сохранить Изображение с кодом:

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

скопируйте изображение из пути к любому хосту. Теперь импортируйте в локальную установку Docker с помощью:

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

сначала сохраните изображение Docker в zip-файл:

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

затем загрузите экспортированное изображение в Docker, используя следующую команду:

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

выполнить

docker images

чтобы увидеть список изображений на хосте. Допустим, у вас есть изображение под названием awesomesauce. В вашем терминале, cd в каталог, в который вы хотите экспортировать изображение. Теперь беги:

docker save awesomesauce:latest > awesomesauce.tar

скопировать файл tar на флешку, а потом скопировать его на новый компьютер.

теперь от нового хозяина сделать:

docker load < awesomesauce.tar

теперь иди выпей кофе и почитай Hacker News...

для сглаженного экспорта файловой системы контейнера используйте;

docker export CONTAINER_ID > my_container.tar

использовать cat my_container.tar | docker import - для импорта указанного изображения.

при использовании docker-machine, вы можете сделать docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load для копирования изображений между машинами mach1 и mach2.

и, конечно, вы также можете придерживаться 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 чтобы скопировать изображение с текущего узла docker на mach

или

docker $(docker-machine config <mach>) save <image> | docker load копировать из mach к текущему докеру-хосту.

Я предполагаю, что вам нужно сохранить 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

Сохраните изображение с именем архива в файл tar. Я буду использовать /media/sf_docker_vm/ Сохранить Изображение.

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

скопировать archiveName.tar-файл для вашего нового экземпляра Docker с использованием любого метода, работающего в вашей среде, например FTP,SCP и т. д.

запустить docker load команда на новом экземпляре Docker и укажите расположение изображения tar файл.

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

наконец, запустить чтобы проверить, что изображение теперь доступно.

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

пожалуйста подробный пост.

все остальные ответы очень полезны. Я просто прошел через ту же проблему и выяснить простой способ с docker machine scp.

начиная с Docker Machine v0.3.0, scp был введен для копирования файлов с одной машины Docker на другую. Это очень удобно, если вы хотите скопировать файл с вашего локального компьютера на удаленную машину Docker, такую как AWS EC2 или Digital Ocean, потому что Docker Machine заботится о учетных данных 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 и каталог, который вы хотите, чтобы файл tar был /home/ubuntu.

  1. загрузить Docker-образ

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

для переноса образов из локальной установки Docker в виртуальную машину minikube:

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

Вы можете использовать sshfs:

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

Я хочу переместить все изображения с тегами.

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

объяснение:

первый OUT получает все теги, но разделенные новыми строками. Второй OUTPUT получает все теги в массиве. Третий $(echo "${OUTPUT[*]}") ставит все теги для одного до tar помещает содержимое на stdin, которое можно схватить docker load.

вот как вы можете перемещать изображения Docker между двумя удаленными регистрами / репозиториями. Он работает с Докером версии 1.10.2, построить 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

это удобный метод, если вы хотите перенести свои изображения в сервис AWS ECS/ECR.

docker-push-ssh - это утилита командной строки для этого сценария.

он устанавливает временный частный реестр докеров на сервере, устанавливает SSH-туннель с вашего локального хоста, толкает ваш образ, а затем очищает после себя.

преимущество этого подхода над docker save (на момент написания большинство ответов используют этот метод) заключается в том, что только новые слои передаются на сервер, что приводит к гораздо более быстрой загрузке.

часто используете промежуточный реестр, такой как dockerhub, нежелателен и громоздок.

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

установка:

pip install docker-push-ssh

пример:

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

самый большой нюанс заключается в том, что вы должны вручную добавить свой localhost в Docker insecure_registries конфигурации. Запустите инструмент один раз, и он даст вам информативную ошибку:

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

где я должен установить флаг' -- insecure-registry ' на Mac OS?

прежде всего, Docker images ( Docker images) доступны через docker images hub (или использовать предыдущий метод для экспорта). Кстати, если вы ищете способ переместить или скопировать контейнер Docker (настройки P. S.-А). Возможным решением является использование следующей команды:

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

например:

docker ps -a

Sample output

docker container export cf54f5423a66 -o cf54f5423a66.tar

делая это, вы можете сохранить изменения в вашем следующем развертывание. Для получения дополнительной информации, пожалуйста, обратитесь к Докер документации

Я думаю, что лучшим вариантом было бы войти в Docker Hub и нажать изображение там.

первая часть вашего имени изображения (перед косой чертой) должна соответствовать вашему нику на Docker Hub, вторая часть-это ваше желаемое имя приложения и чем тег (версия).

результат: brilliance643 / nagios: finalv

результат: вы сможете получить доступ к своему изображению только с помощью

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

из любой части Вселенной.

Comments

    Ничего не найдено.