#docker
#docker
Вопрос:
изображение :
docker save -o /root/bkp1/docker_image_bkp ccn/ccn-server:1.0.4
Контейнер:
docker export cef0dff04e70 > /root/bkp1/container.tar
На новом сервере :
docker load -i /root/pmmbkp1/docker_image_bkp
cat /root/bkp1/container.tar | docker import - ccdata
И я создал и запустил его. Но я не могу найти старые данные на новом сервере. Как мне переместить исторические данные вместе с контейнерами?
Ответ №1:
В настоящее время (сентябрь 2016 г.) НИ ОДИН из docker save
или docker export
или даже docker commit
не может создать файл tar, содержащий какие-либо данные, содержащиеся в томах, смонтированных внутри контейнера.
Короче говоря, если вы хотите переместить объемные данные с одного сервера на другой, лучший способ — использовать общую файловую систему для хранения данных вашего контейнера docker. Пожалуйста, проверьте Подключение тома общего хранилища в качестве документа тома данных.
Если у вас есть общее хранилище для вашего кластера Docker, вы можете остановить свой старый контейнер на исходном сервере, а затем использовать те же конфигурации для запуска нового контейнера на другом сервере. И старый контейнер, и новый контейнер должны монтировать один и тот же том, существующий в общей системе хранения.
Сохранение данных по-прежнему является проблемой в системе оркестровки Docker. Но другой инструмент оркестровки, Kubernetes 1.4, теперь поддерживает постоянные тома.
Редактировать:
Если ваш контейнер уже запущен и вы хотите его переместить, вы можете попробовать выполнить следующие шаги:
-
Сохраните исходный контейнер в образ с
docker save
помощью илиdocker commit
. Затем загрузите сохраненное изображение на новый сервер. -
Проверьте точки подключения исходного контейнера, затем найдите файлы локального тома с настройкой точек подключения. Например, с
docker inspect
помощью , вы можете найти что-то похожее на это:«Монтирует»: [
{ "Name": "95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a", "Source": "/var/lib/docker/volumes/95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a/_data", "Destination": "/var/lib/mysql", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }
],
Здесь вы можете видеть, что точка монтирования "/var/lib/docker/volumes/95d7a2419c62242149562d5098edcc7578754ae2f3c35a45c4d690f3c340905a/_data"
-
Скопируйте файл локального тома на новый сервер.
-
Запустите новый контейнер на новом сервере, где новый контейнер должен смонтировать к нему копию исходного файла локального тома. Для этого вы можете использовать
docker run
-v
параметр команды. -
Возможно, вам потребуется рассмотреть возможность использования той же конфигурации для запуска нового контейнера на новом сервере.
docker inspect
команда может помочь вам узнать конфигурацию контейнера, а также конфигурацию точки монтирования.
Приведенное выше решение может показаться сложным и уродливым, но другого способа легко переместить контейнер нет, если вы не используете общее хранилище.
Комментарии:
1. Спасибо, что поделились подробностями об общем хранилище. Но в моем случае изображение, контейнер и данные docker находятся на локальном диске на сервере. Как мне переместить данные на новый сервер?
2. @user1638016 Привет, извините за более поздний ответ, я обновил свой ответ, пожалуйста, проверьте его.
3. Привет, Хаоминг, не могли бы вы поделиться командой, которую я должен использовать для связывания источника монтирования для контейнера данных. Я скопировал контейнер данных на новый сервер (/var/ lib/docker/ volumes/7362bc5fa96cbc2cca9572b6c4890e54be519c1ad516af5f804c28ec7e7fab69/_data), но не уверен, как его смонтировать с контейнером. (docker create -v /opt/nms/data —name nms-data nms / nms-server:2.0.8 /bin/true)
4. (docker create -v /opt/nms/data —name nms-data nms / nms-server: 2.0.8 /bin/true ) проверка docker показывает другой источник на новом сервере «Source»: «/var/ lib/docker/ volumes/0f34b5ae21d3794ef62bcb8ad42b8f12559450f969aca90174a5d07f7c6d9749 / _data», )
5. Проверьте это docs.docker.com/engine/tutorials/dockervolumes .
-v /src/webapp:/opt/webapp
где/src/webapp
находится ваш локальный каталог и/opt/webapp
каталог в вашем контейнере. Любой файл/src/webapp
будет доступен в/opt/webapp
папке вашего контейнера