Как переместить изображения и контейнеры на новый сервер с историческими данными

#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, теперь поддерживает постоянные тома.

Редактировать:

Если ваш контейнер уже запущен и вы хотите его переместить, вы можете попробовать выполнить следующие шаги:

  1. Сохраните исходный контейнер в образ с docker save помощью или docker commit . Затем загрузите сохраненное изображение на новый сервер.

  2. Проверьте точки подключения исходного контейнера, затем найдите файлы локального тома с настройкой точек подключения. Например, с 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"

  1. Скопируйте файл локального тома на новый сервер.

  2. Запустите новый контейнер на новом сервере, где новый контейнер должен смонтировать к нему копию исходного файла локального тома. Для этого вы можете использовать docker run -v параметр команды.

  3. Возможно, вам потребуется рассмотреть возможность использования той же конфигурации для запуска нового контейнера на новом сервере. 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 папке вашего контейнера