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

Поскольку контейнеры Docker представляют собой небольшие коробки программного обеспечения, вы можете легко копировать и перемещать их с компьютера на компьютер. Может быть, вы работали с экземпляром Docker на своем локальном компьютере и решили переместить его на более мощный сервер. Или, возможно, вы просто хотите развернуть свой пользовательский контейнер на нескольких компьютерах, «скопировав и вставив» его. В других случаях вы можете быть недовольны поставщиком облачных вычислений и захотеть перейти к другому. Здесь мы покажем вам, как переместить существующий образ контейнера Docker и объемы данных с одного хоста Linux на другой.
Содержание
- Сохранить образ контейнера с исходного хоста
- Экспорт объема Docker из вашего контейнера
- Загрузить образ контейнера на хост назначение
- Импорт объема Docker в ваш контейнер
- Передача образа без создания файла
- Использование Docker Compose для перемещения всего развертывания Docker
Полезно знать: начните работать с контейнерами, установив Docker на свою дистрибуцию Linux.
Сохранить образ контейнера с исходного хоста
Начните с перечисления доступных контейнеров Docker, работающих на вашей системе. В моем случае я хочу экспортировать мой контейнер Docker Nginx на новую машину:
docker ps
Насчитайте контейнер, который вы хотите скопировать, затем остановите экземпляр:
docker stop NAME_OF_INSTANCE
Контейнер Docker построен на основе общего начального имиджа. Со временем вы добавляете свои собственные изменения к этому базовому изображению. Процессы, работающие внутри контейнера, также могут сохранять свои данные или вносить другие изменения. Чтобы сохранить все это, зафиксируйте текущее состояние вашего контейнера в новом изображении:
docker commit NAME_OF_INSTANCE mycontainerimage
Обратите внимание, что если экземпляр в настоящий момент работает, это действие приостановит его, пока его содержимое сохраняется. Если это проблема, вы можете избежать этой паузы, введя docker commit -p=false NAME_OF_INSTANCE mycontainerimage. Однако делать это не рекомендуется без крайней необходимости. Вероятность создания образа с неполными/несогласованными данными в этом случае увеличивается.
Теперь сохраните только что зафиксированный образ контейнера Docker в архивный файл:
docker save -o mycontainerimage.tar mycontainerimageИспользуйте предпочитаемый вами метод передачи файлов и скопируйте ваш .tar файл на хост, куда вы хотите переместить ваш контейнер Docker. Например, следующая команда передает мой образ Docker Nginx с помощью scp:
scp ./mycontainerimage.tar [email protected]:/home/ramces/Экспорт объема Docker из вашего контейнера
Одним из недостатков сохранения образа Docker является то, что он не включает сопутствующие аксессуары Docker, которые вы настроили вместе с вашим контейнером. Это включает в себя любые сетевые привязки и объемы, которые вы создали для хранения ваших постоянных данных.
Чтобы правильно экспортировать ваш объем данных, сначала установите Git на вашем локальном компьютере:
sudo apt install gitВыполните следующую команду, чтобы скачать скрипт экспорта объема для Docker:
git clone https://github.com/ricardobranco777/docker-volumes.sh.gitУбедитесь, что у экспортного скрипта правильные разрешения, затем скопируйте его в «/usr/local/bin»:
sudo chmod +x ./docker-volumes.sh/docker-volumes.sh
sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/Проверьте, работает ли ваш скрипт правильно, а затем извлеките все связанные объемы для вашего контейнера:
docker-volumes.sh -h
docker-volumes.sh NAME_OF_INSTANCE save mycontainerimage-volume.tar
Отправьте ваши только что архивированные файлы объема Docker на ваш удаленный компьютер:
scp ./mycontainerimage-volume.tar [email protected]:/home/ramces/Загрузить образ контейнера на хост назначения
Войдите в удаленный хост, затем выполните следующую команду, чтобы загрузить его на демона Docker вашего удаленного компьютера:
docker load -i ./mycontainerimage.tarИспользуйте docker create, чтобы повторно инициализировать ваш образ контейнера Docker с его исходными флагами запуска с вашего исходного компьютера. Например, мой контейнер Docker Nginx изначально имел сопоставленный порт 80 на порт 8080 моего компьютера:
docker create --name my-nginx-container -p 8080:80 mycontainerimageЗапустите свой новый импортированный контейнер Docker:
docker start my-nginx-containerПодтвердите, что ваш импортированный образ работает должным образом, перечислив все активные контейнеры в системе:
docker ps
К вашему сведению: превратите свой Raspberry Pi в способную портативную фотогалерею, установив Photoprism с помощью Docker.
Импорт объема Docker в ваш контейнер
Чтобы импортировать файл объема Docker .tar, сначала установите Git на вашем новом хосте:
sudo apt install gitТочно так же, как и в вашей исходной системе, скачайте вспомогательный скрипт docker-volume.sh, установите его разрешения на «выполнение», а затем скопируйте его в каталог «/usr/local/bin» вашего нового компьютера.

Создайте новый контейнер Docker, используя ваш экспортированный файл изображения:
docker create --name my-nginx-container -v myvol:/usr/share/nginx/html -p 8080:80 mycontainerimageЗапустите скрипт docker-volume.sh с вашим исходным .tar файлом для загрузки его на демон Docker вашей новой системы:
docker-volumes.sh my-nginx-container load mycontainerimage-volume.tarЗапустите ваш новый контейнер Docker, выполнив следующую команду:
docker start my-nginx-containerПроверьте, загружает ли ваш контейнер правильно ваш объем, взглянув на его внутренние данные конфигурации:
docker inspect -f '{{ .Mounts }}' my-nginx-container
Передача образа без создания файла
Иногда вам может не понадобиться создавать файл mycontainerimage.tar.gz. Возможно, у вас недостаточно места на диске, так как контейнер содержит много данных. Вы можете сохранить, передать и загрузить образ на хост назначения за одну команду. После выполнения команды docker commit, о которой говорилось выше, вы можете использовать:
docker save mycontainerimage | ssh [email protected] docker loadЭто должно работать и с Windows, так как теперь у него есть встроенный SSH-клиент (PuTTY больше не нужен).
Продолжите с командой docker create, которая соответствует вашей ситуации.
Примечание: Убедитесь, что вы правильно смонтировали любой объем Docker, который ранее был подключен к вашему контейнеру, перед тем как запускать импортированный образ.
Наконец, запустите ваш новый импортированный контейнер Docker, выполнив команду docker start, за которой следует имя вашего контейнера.

Использование Docker Compose для перемещения всего развертывания Docker
С помощью плагина Compose Docker позволяет создавать, настраивать и запускать сложные программы, не беспокоясь об основной программной оболочке сервера. Это, в свою очередь, позволяет вам создавать воспроизводимые развертывания приложений на различных системах Linux.
Чтобы начать миграцию вашей существующей настройки Docker к Docker Compose, сначала убедитесь, что плагин в вашем системе:
sudo apt install docker-compose-plugin docker-buildx-pluginСоздайте новую папку в вашей домашней директории для вашего развертывания Docker Compose:
mkdir ~/my-docker-compose && cd ~/my-docker-composeИспользуйте ваш любимый текстовый редактор, чтобы создать файл «docker-compose.yml» для вашего приложения:
nano ./docker-compose.ymlВставьте следующий блок кода в ваш файл Compose, а затем адаптируйте его под свои конкретные нужды:
version: '3'
volumes:
myvol: # Замените на имя вашего импортированного объема.
services:
nginx:
image: mycontainerimage # Замените на имя вашего импортированного образа Docker.
ports:
- "8080:80"
volumes:
- myvol:/usr/share/nginx/html # Замените "myvol" на имя вашего смонтированного образа.Сохраните ваш новый файл Compose, затем выполните следующую команду, чтобы запустить его:
docker compose up -dНаконец, проверьте, работает ли ваше развертывание Compose правильно. В моем случае я тестирую свой контейнер Docker Nginx, открывая веб-браузер и переходя по адресу «localhost:8080».

Изучение того, как копировать и перемещать ваш контейнер Docker на другие хосты Linux, — это всего лишь одна из немногих задач, которые вы можете выполнить с помощью вашей машины. Изучите этот замечательный мир само-хостинга, установив сервер Minecraft на Linux с помощью Docker.
Автор изображения: Max Duzij через Unsplash. Все изменения и скриншоты исполнены Рамсесом Редом.