使用 PostGres DB 时使用 docker-compose.yml 优化 Docker 构建、性能等

使用 PostGres DB 时使用 docker-compose.yml 优化 Docker 构建、性能等

我只是对使用 Docker 构建和 docker-compose.yml 时如何最好地构建和管理数据库服务器有一个大概的了解。从历史上看,我有时会将 Postgres 数据库绑定到主机 FS 上的绑定文件夹。这样做似乎有好处也有坏处,但最近似乎最好使用 docker 卷。这些在主机上不太“可见”,因为不同的设置和操作系统可能会将 docker 卷放在不同的地方,而且我经常在 MacOS 或 Windows 上开发,但在 LINUX 上部署。

以 Postgres 为例:

postgres:
  image: postgres:15
  ports:
    - "5557:5432"
  restart: unless-stopped
  volumes:
    - ./Postgres:/var/lib/postgresql/data vs. Postgres:/var/lib/postgresql/data
  command:  postgres -c stats_temp_directory=/tmp
  env_file:
    - ./config/.env

如果我想使用docker卷而不是绑定的主机文件夹,我将需要下面的卷。

volumes:
  Postgres:

我只是尝试各种配置来优化性能和可移植性,同时考虑到某些服务器可能将系统放在 SSD 上,而将文件系统的其他安装部分放在 RAID、NFS 甚至云上。

我推测我应该调整 postgres 的其他设置以获得最佳性能。我之前在这里问过一个相关的非常流行的问题:

https://stackoverflow.com/questions/66325175/docker-container-with-postgres-warning-could-not-open-statistics-file-pg-stat

我认为可以通过使用完全由 docker 拥有的 docker 卷而不是映射到主机上的绑定文件夹来解决这个问题?

只是想寻求一些关于如何在这种设置中优化数据库性能的建议。我的 MySQL 数据库不是那么大,大概只有 2GB,而 postgres 数据库甚至更小,尽管在未来几年内,两者都可能增长到 10 GB。我读到在 postgres 中运行 ACUUM、ANALYZE 和 REINDEX 会很有帮助。

另外,如果我想迁移,似乎有一些选项是使用以下命令将我的主机文件夹内容复制到卷中:

docker run --rm \
  -v ./MySQL_DB:/from \
  -v MySQL_DB:/to \
  alpine ash -c "cd /from ; cp -av . /to"

与仅在新卷上创建一个新的数据库,然后使用容器中的 CLI 将转储的数据库导入到卷中相比?

相关内容