В этой статье используется лицензионное соглашение «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 и вопросах программирования, а также время от времени будем делиться технической информацией о салоне в группе.
Друзья, которые любят бросать, могут отсканировать код, чтобы добавить друзей. (Пожалуйста, укажите источник и цель, иначе не пройдет проверку)