在Docker容器中切换数据库转储的方法

情况 :我正在进行一个大型的启动web项目,这个项目经常投入生产,所以所有的开发都很快。 我们有几个环境 – 开发(本地),质量保证,阶段和生产不同的数据在数据库当然(我们使用postgres)。 我的日常工作是当我开发一些新的function时,一些质量保证人员可以在其中一个环境中发现一个严重的错误,所以我必须修复它,或者至less看看有什么不对。

问题 :从本地上下文切换到生产/ qa / stage,我通常在本地从这些环境中转储数据库,然后进行debugging。 问题是,起初,转储非常繁重,有时需要30分钟才能下载和应用,其次是当我将其转储到本地数据库时,我正在丢失本地的开发环境。

希望 :能够在本地快速切换上下文

示例 :让我们说,我们有Web服务器的docker容器,它链接到像这个示例docker-compose.yml文件中的postgres容器

 version: '3' services: pg: image: "mdillon/postgis" hostname: pghost ports: - "5433:5432" volumes: - "~/pgdata:/var/lib/postgresql/data" ... webserver: image: "some_app_image" links: - pg:postgres ... 

假设这个networking服务器真的很重,所以有多个运行的容器在内存使用和可读性方面将是一个大问题。

问题 :是否有任何优雅(或不)的方式在不同的数据库数据集之间快速切换? 也许有不同的pgdata文件夹,或者以某种方式链接几个postgres容器(虽然我不知道这是可能的)

因为事实是备份,下载和恢复大型数据库需要时间,所以它永远不会很快 。 所有你可以真正控制到足以优化的是你经常要做这三件事中的任何一件。 您的select归结为使用诸如RDS或Google Cloud SQL之类的服务,它可以让您按需将数据库备份和还原到云端,并完全消除下载; 或自动执行备份生成,下载(使用编排系统,您可以“下载”到主机服务器,启动一个新的数据库容器,通过一些脚本来恢复备份,这将比通过线路发送备份快得多),还原进程并在计时器上运行它们以设置可用于testing的安全沙箱数据库。 后者从实时延迟,这意味着,如果全新的数据显示缺陷,你仍然需要等待更新你的沙箱,但它可能仍然是值得的。