I decided to run Kanboard, an open source project management application, in a rootless Podman pod as a small weekend project. The pod consists of three containers, an infra-container, a kanboard-container, and a postgresql-container. That deployment went well, but eventually, the image I used for the postgresql-container became deprecated, meaning it was no longer receiving updates. It was time to move to a different image, but that meant migrating a database between containers. It sounds intimidating, but the process is actually straightforward. Here's how to do it.

Migrate to an upgraded PostgreSQL

The process for migrating a database in containers is mostly the same as it is for any other database, but with an additional step to manage containers. Here's an outline of the steps I took:

  1. Back up the current database.
  2. Stop and remove the container.
  3. Delete the directory and files of the old PostgreSQL version from the Podman volume.
  4. Move the SQL dump file to the Podman volume.
  5. Start the pod with the rhel8/postgresql-13 container.
  6. Restore the database.

[ Download the Bash shell scripting cheat sheet. ]

Here are the steps broken down.

First, back up the database:

$ podman exec -t [container name] \
/usr/bin/pg_dump [database name] > dump.sql

Next, empty the Podman volume of the database:

$ podman volume inspect [volume name]
$ sudo rm -rf \
~/.local/share/containers/storage/volumes/[volume name]/_data/*

Now move the database dump to the Podman volume:

$ mv dump.sql \
~/.local/share/containers/storage/volumes/[volume name>]/_data/

Note: be sure to start the postgresql-cotainer using the new container image 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

And finally, restore the database to the container:

$ podman exec -it [container name] bash
$ psql -U [user name] -d [database name] \
< /var/lib/pgsql/data/dump.sql

Give it a try

Migrating to a new database release in containers is not difficult when you know the steps. I also think you can apply these procedures to other databases that run in containers.

Haven't started your container journey yet? Well, you might begin with Alexon Oliveira's article on Podman scripting.


关于作者

Jörg has been a Sysadmin for over ten years now. His fields of operation include Virtualization (VMware), Linux System Administration and Automation (RHEL), Firewalling (Forcepoint), and Loadbalancing (F5). He is a member of the Red Hat Accelerators Community and author of his personal blog at https://www.my-it-brain.de.

UI_Icon-Red_Hat-Close-A-Black-RGB

按频道浏览

automation icon

自动化

有关技术、团队和环境 IT 自动化的最新信息

AI icon

人工智能

平台更新使客户可以在任何地方运行人工智能工作负载

open hybrid cloud icon

开放混合云

了解我们如何利用混合云构建更灵活的未来

security icon

安全防护

有关我们如何跨环境和技术减少风险的最新信息

edge icon

边缘计算

简化边缘运维的平台更新

Infrastructure icon

基础架构

全球领先企业 Linux 平台的最新动态

application development icon

应用领域

我们针对最严峻的应用挑战的解决方案

Virtualization icon

虚拟化

适用于您的本地或跨云工作负载的企业虚拟化的未来