Как скопировать / переместить контейнер Docker на другой хост

Рекомендуемые контейнеры Docker Move

Поскольку контейнеры Docker - это небольшие коробки с программным обеспечением, так сказать, вы можете копировать и перемещать их с компьютера на компьютер. Однако это не часто обсуждается, вероятно, потому, что более крупные организации создают свои собственные репозитории, где они могут настраивать свои собственные образы и распространять по своим серверам по своему усмотрению. Но вам не придется беспокоиться о настройке собственной линии распространения, если вам иногда нужно перемещать один или несколько контейнеров.

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

Сохранить образ контейнера с исходного хоста

Необязательно сначала останавливать контейнер, но мы настоятельно рекомендуем это сделать. Вы сделаете снимок данных в своем экземпляре Docker. Если он работает, пока вы это делаете, есть небольшая вероятность, что некоторые файлы могут оказаться неполными в вашем снимке. Представьте, что кто-то загружает файл размером 500 МБ. После загрузки 250 МБ вы вводите команду docker commit. Затем загрузка продолжается, но при восстановлении этого образа Docker на другом хосте может быть доступно только 250 МБ из 500 МБ.

Итак, если можете, сначала остановите экземпляр.

Докер перемещает контейнеры с помощью крана

Контейнер Docker создается из общего исходного образа. Со временем вы вносите свои изменения в это базовое изображение. Процессы, запущенные внутри контейнера, также могут сохранять свои данные или вносить другие изменения. Чтобы сохранить все это, вы можете зафиксировать это новое состояние в новом изображении.

Обратите внимание, что если экземпляр в данный момент запущен, это действие приостановит его на время сохранения его содержимого. Если вы добавили в контейнер много данных, эта операция займет больше времени. Если это проблема, вы можете избежать этой паузы, введя docker commit -p=false NAME_OF_INSTANCE mycontainerimage вместо следующей команды. Однако не делайте этого без крайней необходимости. В этом случае увеличиваются шансы создать изображение с непоследовательными / неполными данными.

В этом руководстве для результирующего изображения было выбрано общее имя mycontainerimage. Вы можете изменить это имя, если хотите. Если вы это сделаете, не забудьте заменить его во всех последующих командах, где вы с ним встретитесь.

Фиксация контейнеров Docker Move

Теперь сохраните это изображение в файл и сожмите его.

Затем используйте предпочтительный метод передачи файлов и скопируйте mycontainerimage.tar.gz на хост, на который вы хотите перенести контейнер.

Загрузить образ контейнера на целевой хост

После входа на хост, на который вы перенесли образ, импортируйте его в Docker.

Поскольку вы никогда не инициализировали этот контейнер здесь, вы пока не можете запустить его с помощью docker start. Вместо этого введите ту же команду, которую вы использовали раньше, когда вы впервые запускали этот экземпляр Docker. Единственная разница теперь заключается в том, что вы будете использовать "mycontainerimage" в конце вместо любого изображения, которое вы использовали в прошлом.

Следующая команда - это просто пример; не копируйте и не вставляйте это, если оно не относится к вам. (При первом запуске образа никаких специальных параметров не требовалось)

В отличие от этого, ниже приведен пример команды, в которой параметр --publish был необходим для перенаправления порта 80 на хост-машине на порт 80 на контейнере:

После этого вы можете остановить и запустить этот контейнер обычным образом с помощью команд docker stop и docker start.

Передача изображения без создания файла

Иногда вам может потребоваться пропустить создание файла mycontainerimage.tar.gz. Возможно, у вас недостаточно места на диске, поскольку в контейнере много данных. Вы можете сохранять, сжимать, передавать, распаковывать и загружать изображение на целевой хост с помощью одной команды. После выполнения команды docker commit, описанной в первом разделе, вы можете использовать это:

Он также должен работать в Windows, поскольку он теперь имеет встроенный SSH-клиент (PuTTY больше не нужен).

После этого продолжите выполнение команды docker run, которая применима к вашей ситуации.

Заключение

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

Изображение предоставлено: Медицинская служба ВВС

Один комментарий

  1. `docker load` автоматически распаковывается, см. https://docs.docker.com/engine/reference/commandline/load/

Комментарии закрыты.