Поскольку контейнеры Docker - это небольшие коробки с программным обеспечением, так сказать, вы можете копировать и перемещать их с компьютера на компьютер. Однако это не часто обсуждается, вероятно, потому, что более крупные организации создают свои собственные репозитории, где они могут настраивать свои собственные образы и распространять по своим серверам по своему усмотрению. Но вам не придется беспокоиться о настройке собственной линии распространения, если вам иногда нужно перемещать один или несколько контейнеров.
Возможно, вы работали над экземпляром Docker на своем локальном компьютере и решили перенести его на более мощный сервер. Или, может быть, вы просто хотите развернуть свой индивидуальный контейнер на нескольких компьютерах, "скопировать и вставить" его. В других случаях вы можете быть недовольны поставщиком облачных вычислений и захотите переключиться на другого. В любой ситуации есть довольно простая процедура, которая будет подробно описана ниже.
Сохранить образ контейнера с исходного хоста
Необязательно сначала останавливать контейнер, но мы настоятельно рекомендуем это сделать. Вы сделаете снимок данных в своем экземпляре Docker. Если он работает, пока вы это делаете, есть небольшая вероятность, что некоторые файлы могут оказаться неполными в вашем снимке. Представьте, что кто-то загружает файл размером 500 МБ. После загрузки 250 МБ вы вводите команду docker commit
. Затем загрузка продолжается, но при восстановлении этого образа Docker на другом хосте может быть доступно только 250 МБ из 500 МБ.
Итак, если можете, сначала остановите экземпляр.
остановка докера NAME_OF_INSTANCE
Контейнер Docker создается из общего исходного образа. Со временем вы вносите свои изменения в это базовое изображение. Процессы, запущенные внутри контейнера, также могут сохранять свои данные или вносить другие изменения. Чтобы сохранить все это, вы можете зафиксировать это новое состояние в новом изображении.
Обратите внимание, что если экземпляр в данный момент запущен, это действие приостановит его на время сохранения его содержимого. Если вы добавили в контейнер много данных, эта операция займет больше времени. Если это проблема, вы можете избежать этой паузы, введя docker commit -p=false NAME_OF_INSTANCE mycontainerimage
вместо следующей команды. Однако не делайте этого без крайней необходимости. В этом случае увеличиваются шансы создать изображение с непоследовательными / неполными данными.
В этом руководстве для результирующего изображения было выбрано общее имя mycontainerimage
. Вы можете изменить это имя, если хотите. Если вы это сделаете, не забудьте заменить его во всех последующих командах, где вы с ним встретитесь.
docker commit NAME_OF_INSTANCE mycontainerimage
Теперь сохраните это изображение в файл и сожмите его.
docker save mycontainerimage |gzip> mycontainerimage.tar.gz
Затем используйте предпочтительный метод передачи файлов и скопируйте mycontainerimage.tar.gz
на хост, на который вы хотите перенести контейнер.
Загрузить образ контейнера на целевой хост
После входа на хост, на который вы перенесли образ, импортируйте его в Docker.
gunzip-c mycontainerimage.tar.gz | docker load
Поскольку вы никогда не инициализировали этот контейнер здесь, вы пока не можете запустить его с помощью docker start
. Вместо этого введите ту же команду, которую вы использовали раньше, когда вы впервые запускали этот экземпляр Docker. Единственная разница теперь заключается в том, что вы будете использовать "mycontainerimage" в конце вместо любого изображения, которое вы использовали в прошлом.
Следующая команда - это просто пример; не копируйте и не вставляйте это, если оно не относится к вам. (При первом запуске образа никаких специальных параметров не требовалось)
docker run - d - name=PICK_NAME_FOR_CONTAINER mycontainerimage
В отличие от этого, ниже приведен пример команды, в которой параметр --publish
был необходим для перенаправления порта 80 на хост-машине на порт 80 на контейнере:
docker run -d--name=http-server --publish80:80 mycontainerimage
После этого вы можете остановить и запустить этот контейнер обычным образом с помощью команд docker stop
и docker start
.
Передача изображения без создания файла
Иногда вам может потребоваться пропустить создание файла mycontainerimage.tar.gz
. Возможно, у вас недостаточно места на диске, поскольку в контейнере много данных. Вы можете сохранять, сжимать, передавать, распаковывать и загружать изображение на целевой хост с помощью одной команды. После выполнения команды docker commit
, описанной в первом разделе, вы можете использовать это:
docker save mycontainerimage |gzip|ssh root@203.0.113.1 'gunzip | docker load'
Он также должен работать в Windows, поскольку он теперь имеет встроенный SSH-клиент (PuTTY больше не нужен).
После этого продолжите выполнение команды docker run
, которая применима к вашей ситуации.
Заключение
docker save
и docker load
отлично подходят в качестве специального решения для случайного перемещения контейнеров. Но помните, если вы делаете это часто, вы можете вместо этого создать свой собственный частный репозиторий.
Изображение предоставлено: Медицинская служба ВВС
Один комментарий
Комментарии закрыты.
`docker load` автоматически распаковывается, см. https://docs.docker.com/engine/reference/commandline/load/