我只是对使用 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 的其他设置以获得最佳性能。我之前在这里问过一个相关的非常流行的问题:
我认为可以通过使用完全由 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 将转储的数据库导入到卷中相比?