数据库如何适应Docker体系结构?

在过去的几年里,我听到很多关于docker工人的消息,但是我很难理解数据库部分是如何适应的。我明白,应用程序和服务可以存放在docker集装箱内,docker集装箱可以存放二进制文件和所需的库文件。 但是数据库呢?

  1. 如果我有一个现有的60 GB的SQL Server数据库与复制和BI,我需要移动一个容器内的所有数据? 还是只有数据库架构?
  2. 集成testing如何在这样的环境中运行? 我一直听到你可以“旋转”一个容器内的数据库,运行你的testing并丢弃它。 真? 创buildtesting通过所需的整个模式和数据听起来有点复杂。

首先,数据库不过是一个有状态的应用程序。 docker化数据库的方法与docker化应用程序没有什么不同。 您仍然需要将二进制文件和依赖项复制到容器中。

现在在容器中运行数据库将隔离容器文件系统中的数据库。 如果数据库需要当前数据,则必须将其移动/导入容器。 在容器中烘焙数据通常不是很好的做法。 容器图像更好地保持不变和便携。 启动容器后最好将数据导入数据库。 因此,build议启动一个新的数据库容器,并将当前数据库的数据导入到新数据库中。

对于第二个问题,使用docker启动数据库非常简单。 它大多减less到运行一个docker run命令。 而且,大多数stream行的数据库,例如sql-server ,已经被集装箱化了。 对于运行时依赖于数据库的集成testing来说,这非常棒。

传统上,依赖于数据库的集成testing通过启动testing开始的某种内存数据库来处理。 这是需要的,因为在机器上旋转实际的数据库实例并不是微不足道的,并且需要将数据库应用程序安装在机器上。 这使得testing不易移植到新机器上。

Docker解决了这些问题,提供了一个简单的方法来启动一个隔离的数据库实例。 通过运行很less的命令,数据库实例可以通过testing启动并在testing完成后清理。

有三个选项来启用数据库的数据库容器。 首先,正如你所看到的,是“在容器中”(本地)的数据。 这适用于较小的数据集,最高可达2-3 GB,但对于60 GB环境而言,由于存储消耗和创build副本所需的简单时间,这是不切实际的。 第二个选项是克隆(复制)数据并创build一个外部挂载点。 如果有足够的快速存储(闪存?),这项工作相当不错。 第三是安装到快照或克隆映像,这可以通过NetApp,Pure和其他SAN来完成。 在这种情况下,快照支持完整的读/写function,并且应该很好地支持您的用例,但确实需要一些脚本来完成工作。