Как скопировать изображения Docker с одного хоста на другой без использования репозитория
Как перенести изображение Docker с одной машины на другую без использования репозитория, независимо от того, является ли он частным или общедоступным?
Я привык играть и создавать свой собственный образ в VirtualBox, и когда он закончен, я пытаюсь развернуть на других машинах, чтобы иметь реальное использование.
поскольку он основан на собственном образе (например, Red Hat Linux), его нельзя воссоздать из файла Dockerfile.
есть ли простые команды я могу использовать? Или другой решение?
Это, кажется, сохранить/экспортировать можно добиться аналогичного назначения, см. в чем разница между сохранением и экспортом в Docker?, а я предпочитаю для моего случая.
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 для вас.
Сохранить Изображение используя
docker saveкак:docker save -o docker-images.tar app-webкопирование изображений с помощью докер-машина scp
docker-machine scp ./docker-images.tar remote-machine:/home/ubuntuпредположим, что ваш удаленный Докер машина
remote-machineи каталог, который вы хотите, чтобы файл tar был/home/ubuntu.
загрузить 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 -adocker container export cf54f5423a66 -o cf54f5423a66.tarделая это, вы можете сохранить изменения в вашем следующем развертывание. Для получения дополнительной информации, пожалуйста, обратитесь к Докер документации
Я думаю, что лучшим вариантом было бы войти в Docker Hub и нажать изображение там.
первая часть вашего имени изображения (перед косой чертой) должна соответствовать вашему нику на Docker Hub, вторая часть-это ваше желаемое имя приложения и чем тег (версия).
результат: brilliance643 / nagios: finalv
результат: вы сможете получить доступ к своему изображению только с помощью
$docker run -ti -d brilliance643/nagios:finalvиз любой части Вселенной.

Comments