Как перенести образ Docker с одного компьютера на другой без использования хранилища, независимо от того, является ли оно частным или общедоступным?
Я создаю свой собственный образ в VirtualBox, и когда он заканчивается, я пытаюсь развернуть его на других машинах для реального использования.
Поскольку он основан на моем собственном образе (например, Red Hat Linux), он не может быть воссоздан из Dockerfile. Мой докер-файл не легко переносим.
Есть ли простые команды, которые я могу использовать? Или другое решение?
repo:tag
в качестве ссылки на изображение, чемimage id
. Если вы используетеimage id
, загруженное изображение не сохранит тег (и вам придется сделать еще один шаг, чтобы пометить изображение).docker images
, затем используйтеdocker tag DESIREDIMAGEID mycompany/myreponame
. Если ваш идентификатор изображения 591de551d6e4, вы можете сократить идентификатор изображения:docker tag 59 mycompany/myreponame
Передача образа Docker через SSH, архивирование содержимого на лету:
Это также хорошая идея, чтобы поставить
pv
в середине трубы, чтобы увидеть, как происходит передача:(Подробнее о
pv
: домашней странице , странице руководства ).источник
docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) load
копировать изображения между машинами mach1 и mach2 .eval $(docker-machine env dev)
хорош для общего взаимодействия с одним хостом докера, но не для копирования между двумя компьютерами, поскольку в нем задействованы два разных хоста докера.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
. Без ключа "-t" sudo жалуется на sudo: извините, у вас должен быть tty для запуска sudo ; с одним "-t" это то же самое сообщение, потому что ssh говорит, что псевдо-терминал не будет выделен, потому что stdin не является терминалом. и, наконец, с двумя "-t" я получаю содержимое файла tar (т.е. изображение) на моем терминале. Любые идеи?Чтобы сохранить изображение в любом пути к файлу или в общем месте NFS, см. Следующий пример.
Получить идентификатор изображения, выполнив:
Скажем, у вас есть изображение с идентификатором «matrix-data».
Сохраните изображение с идентификатором:
Скопируйте изображение с пути на любой хост. Теперь импортируйте в локальную установку Docker, используя:
источник
Сначала сохраните образ Docker в zip-файл:
Затем загрузите экспортированный образ в Docker с помощью следующей команды:
источник
docker load < my-image.tar.gz
достаточно. Изображение автоматически распаковывается для gzip, bzip2 и xz.Запустить
чтобы увидеть список изображений на хосте. Допустим, у вас есть изображение под названием awesomesauce . В вашем терминале,
cd
в каталог, куда вы хотите экспортировать изображение. Теперь запустите:Скопируйте файл tar на флэш-диск или что-то еще, а затем скопируйте его на новый хост-компьютер.
Теперь с нового хоста делаем:
А теперь иди выпить кофе и почитать Hacker News ...
источник
docker save [image] -o file.tar
иdocker load -i file.tar
чтобы избежать этого!docker save [image] -o file.tar
Кроме того, как представляется, дико быстрееДля упрощенного экспорта файловой системы контейнера используйте;
docker export CONTAINER_ID > my_container.tar
Используйте
cat my_container.tar | docker import -
для импорта указанного изображения.источник
cat my_container.tar | docker import - my_container:new
если импортировать локально в соответствии с cmd helpПри использовании docker-machine вы можете копировать изображения между компьютерами
mach1
иmach2
с помощью:И, конечно, вы также можете
pv
вставлять посередине, чтобы получить индикатор прогестирования:Вы также можете опустить одну из
docker-machine config
вложенных оболочек, чтобы использовать свой текущий докер-хост по умолчанию.скопировать изображение с текущего докер-хоста на
mach
или
скопировать с
mach
текущего докера-хоста.источник
Я предполагаю, что вам нужно сохранить
couchdb-cartridge
с идентификатором изображения 7ebc8510bc2c:Сохраните изображение archiveName в файл tar. Я буду использовать,
/media/sf_docker_vm/
чтобы сохранить изображение.Скопируйте файл archiveName.tar в новый экземпляр Docker, используя любой метод, который работает в вашей среде, например
FTP
,SCP
и т. Д.Запустите
docker load
команду на вашем новом экземпляре Docker и укажите местоположение файла tar изображения.Наконец, выполните
docker images
команду, чтобы убедиться, что изображение теперь доступно.Пожалуйста, найдите этот подробный пост .
источник
Чтобы перенести образы из локальной установки Docker на виртуальную машину minikube:
источник
docker-push-ssh
утилита командной строки, которую я создал только для этого сценарияОн устанавливает временный частный реестр Docker на сервере, устанавливает SSH-туннель с вашего локального хоста, отправляет ваш образ, а затем очищает себя.
Преимущество этого подхода перед
docker save
(на момент написания большинства ответов использует этот метод) состоит в том, что только новые слои передаются на сервер, что приводит к НАМНОГО более быстрой загрузке.Часто использование промежуточного реестра, такого как dockerhub, нежелательно и обременительно.
https://github.com/brthor/docker-push-ssh
Установка:
Пример:
docker-push-ssh -i ~/my_ssh_key username@myserver.com my-docker-image
Самым большим предупреждением является то, что вы должны вручную добавить свой локальный хост в
insecure_registries
конфигурацию Docker . Запустите инструмент один раз, и он выдаст вам информативную ошибку:Где мне установить флаг «--insecure-registry» в Mac OS?
источник
Все остальные ответы очень полезны. Я только что прошел ту же проблему и выяснил легкий путь
docker machine scp
.Начиная с версии Docker Machine v0.3.0, scp был представлен для копирования файлов с одной машины Docker на другую. Это очень удобно, если вы хотите скопировать файл с локального компьютера на удаленный Docker-компьютер, такой как AWS EC2 или Digital Ocean, поскольку Docker Machine позаботится о ваших учетных данных SSH.
Сохранить ваши изображения, используя
docker save
как:Копирование изображений с использованием docker-machine scp
Предположим, что ваш удаленный Docker-компьютер
remote-machine
и каталог, в котором вы хотите разместить tar-файл/home/ubuntu
.Загрузите образ Docker
источник
Я хочу переместить все изображения с тегами.
Объяснение:
Сначала
OUT
получает все теги, но разделяются новыми строками. ВторойOUTPUT
получает все теги в массиве. Третий$(echo "${OUTPUT[*]}")
помещает все теги для однойdocker save
команды, так что все изображения находятся в одном tar.Кроме того, это может быть заархивировано с помощью gzip. На цель, запустите:
-O
опцияtar
помещает содержимое на стандартный ввод, который может быть захваченdocker load
.источник
Вы можете использовать
sshfs
:источник
Скрипт для выполнения функции сохранения и загрузки Docker (опробовано и протестировано):
Докер Сохранить:
Загрузка Docker:
источник
Вы можете использовать одну строку с
DOCKER_HOST
переменной:источник