Обновляете базу данных, работающую в контейнере? Следуйте этим шагам, чтобы сохранить процесс простым и понятным.
Я решил запустить Kanboard, приложение для управления проектами с открытым исходным кодом, в rootless-поде Podman в качестве небольшого проекта на выходные. Под состоит из трех контейнеров: инфраструктурного контейнера, контейнера Kanboard и контейнера PostgreSQL. Развёртывание прошло успешно, но, в конечном итоге, образ, который я использовал для контейнера PostgreSQL, стал устаревшим, что означает, что он больше не получает обновлений. Пришло время перейти к другому образу, но это означало миграцию базы данных между контейнерами. Звучит сложно, но процесс на самом деле прост. Вот как это сделать.
Миграция на обновленную версию PostgreSQL
Процесс миграции базы данных в контейнерах в основном такой же, как и для любой другой базы данных, но с дополнительным шагом для управления контейнерами. Вот схема шагов, которые я предпринял:
Делаем резервную копию текущей базы данных.
Останавливаем и удаляем контейнер.
Удаляем каталог и файлы старой версии PostgreSQL из тома Podman.
Перемещаем файл дампа SQL на том Podman.
Запускаем под с контейнером rhel8/postgresql-13.
Восстанавливаем базу данных.
Вот действия по шагам.
Сначала создаём резервную копию базы данных:
$ podman exec -t [container name] \
/usr/bin/pg_dump [database name] > dump.sql
Затем очищаем том Podman базы данных:
$ podman volume inspect [volume name]
$ sudo rm -rf \
~/.local/share/containers/storage/volumes/[volume name]/_data/*
Теперь перемещаем дамп базы данных на том Podman:
$ mv dump.sql \
~/.local/share/containers/storage/volumes/[volume name>]/_data/
Примечание: обязательно запускаем контейнер postgresql, используя новый образ контейнера rhel8/postgresql-13:
$ podman run -d --pod [pod name] --name [container name] \
-e POSTGRESQL_USER=root \
-e POSTGRESQL_PASSWORD=SecretPassword \
-e POSTGRESQL_DATABASE=[database name] \
-v [volume name]:/var/lib/pgsql/data:Z rhel8/postgresql-13
И, наконец, восстанавливаем базу данных в контейнер:
$ podman exec -it [container name] bash
$ psql -U [user name] -d [database name] \
< /var/lib/pgsql/data/dump.sql
Попробуйте сами
Переход на новую версию базы данных в контейнерах несложен, если вы знаете необходимые шаги. Я также считаю, что вы можете применить эти процедуры и к другим базам данных, работающим в контейнерах.
Перевод с некоторыми авторскими заголовками.
Автор оригинала: Jörg Kastning.