Миграция хранилищ контейнеров Docker

контейнер Docker
Миграция хранилищ контейнеров Docker

В этой статье используется лицензионное соглашение «Signature 4.0 International (CC BY 4.0)», добро пожаловать на перепечатку или изменение для использования, но вам необходимо указать источник.Атрибуция 4.0 Международная (CC BY 4.0)

Автор этой статьи: Су Ян

Создано: 14 июля 2019 г. Статистические слова: 3500 слов Время чтения: 7 минут на чтение Ссылка на эту статью:Поиск teay.com/2019/07/14/…


Миграция хранилищ контейнеров Docker

Первый черновик этой статьи был написан вGitLab на сервере миграцииПосле релиза по разным причинам (занятость+прокрастинация) лежал в черновом ящике.Учитывая, что все больше студентов используют контейнеры, все еще есть некоторые требования к данным для снижения веса системы, переноса данных и расширения, так что Воспользуюсь выходными.Закончил эту статью.

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

написать впереди

Смонтируйте диск с данными, вы можете обратиться кболее ранний блог, я не буду повторяться здесь, для удобства описания я буду использовать новый хост в качестве демонстрации здесь.docker pullСкачал несколько часто используемых зеркал.

использовать сначалаdfУзнайте о состоянии раздела текущей машины.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M  5.3M  390M   2% /run
/dev/vda1        40G  8.3G   30G  22% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vdb1        20G   45M   19G   1% /data
tmpfs           395M     0  395M   0% /run/user/0

Вы можете видеть, что системный диск имеет 40G, который установлен на/корневой каталог, устройство/dev/vda1, а диск с данными имеет 20G, который смонтирован в/data(личные привычки), устройство/dev/vdb1.

Если это старая машина с работающими контейнерами, вы можете увидеть вывод, подобный следующему.

overlay         196G   24G  163G  13% /var/lib/docker/overlay2/69e985e9fbc2bbaee2fbdcd81c514d64c4ed9862233bf4797a75ac10df80ed1e/merged
shm              64M  4.0K   64M   1% /var/lib/docker/containers/14777d5d02f2600ea134a8eff061dc4d2fd440b747c936da6024386f457a9c2c/mounts/shm

Перед миграцией нам нужно понять место хранения данных контейнера по умолчанию.

# docker info | grep "Docker Root Dir"
Docker Root Dir: /var/lib/docker

пройти черезdocker infoМы видим, что место установки по умолчанию находится в/var/lib/docker, да, по умолчанию на системном диске.По мере того, как загружается все больше и больше образов, создается все больше и больше образов и запускается все больше и больше контейнеров, системный диск может быстро стираться им и происходить некоторые неожиданные вещи: система не может быть запущена или работает очень медленно, поэтому настоятельно рекомендуется выполнить ее миграцию.

начать миграцию

Учитывая, что некоторые студенты не являются новыми машинами, мы просто запускаем здесь контейнер Nginx, чтобы имитировать состояние «доступны данные» и помочь нам проверить результаты миграции.

docker run -d -p 8080:80 nginx

После запуска Nginx мы используем curl, чтобы убедиться, что сервис работает.

# curl 127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Затем используйте команду du, чтобы увидеть, что в предыдущем разделе используетсяdocker infoУзнайте, насколько велик каталог данных по умолчанию в Docker.

# du -hs /var/lib/docker
4.3G	/var/lib/docker

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

Чтобы выполнить миграцию данных, вам нужно сначала приостановить службу Docker.

service docker stop

Создайте каталог миграции (каталог, используемый для размещения новых данных), лично мне нравится хранить пользовательские данные, для которых можно создать резервную копию, в разделе приложения./dataВниз.

mkdir -p /data/docker/

Затем используйте всемогущий rsync для переноса данных.

rsync -avz /var/lib/docker/ /data/docker

После прокрутки длинного экрана журнала вы увидите вывод, подобный следующему:

docker/tmp/
docker/trust/
docker/volumes/
docker/volumes/metadata.db

sent 1,514,095,568 bytes  received 3,096,373 bytes  4,998,984.98 bytes/sec
total size is 3,955,563,885  speedup is 2.61

Данные переносятся таким образом, а целостность гарантируется rsync. Следующим шагом является изменение конфигурации докера, чтобы позволить докеру загружать и хранить данные из нового местоположения.

редактировать/etc/docker/daemon.jsonФайл конфигурации, если у вас нет этого файла, вам необходимо создать его самостоятельно.В соответствии с каталогом миграции выше, базовая конфигурация выглядит следующим образом:

{
    "data-root": "/data/docker"
}

Если вы ранее модифицировали зеркало докера (то же самое для других), то ваша конфигурация должна быть изменена следующим образом:

{
    "data-root": "/data/docker",
    "registry-mirrors": [
        "http://YOUR_MIRROR_LINK"
    ]
}

Запустите службу контейнера.

service docker start

Используйте команду в начале статьи, чтобы еще раз проверить настройки хранилища данных docker, и вы увидите, что конфигурация вступила в силу.

# docker info | grep "Docker Root Dir"
Docker Root Dir: /data/docker

Помните контейнер Nginx, упомянутый в начале этого раздела, мы перезапустим его, чтобы убедиться, что сервис доступен, сначала найдите «труп» этого контейнера.

# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
fd9b79ae8574        nginx               "nginx -g 'daemon of…"   44 minutes ago      Exited (0) 31 minutes ago                       admiring_yalow

Затем используйте базовую команду контейнера, чтобы запустить экземпляр.

docker start fd9b79ae8574

Наконец, используйте curl, чтобы проверить результат:

# curl 127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

На этом миграция завершена.

Кстати, ты помнишь, что мы впервые увидели/var/lib/dockerкаталог, теперь это совершенно бесполезно, вы можете использоватьrm -rf /var/lib/dockerПриберись.

Наконец

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

Кажется, мне все еще нужно давать себе больше мелких задач, чтобы каждую неделю подчищать предыдущие заметки и черновики блога.

—ЭОФ


Теперь у меня есть небольшая группа по метанию, в которую входят друзья, которые любят метать.

Без рекламы мы будем вместе болтать о софте, HomeLab и вопросах программирования, а также время от времени будем делиться технической информацией о салоне в группе.

Друзья, которые любят бросать, могут отсканировать код, чтобы добавить друзей. (Пожалуйста, укажите источник и цель, иначе не пройдет проверку)

Эти вещи о том, чтобы бросить группу в группу