数据库如何适应Docker体系结构?
在过去的几年里,我听到很多关于docker工人的消息,但是我很难理解数据库部分是如何适应的。我明白,应用程序和服务可以存放在docker集装箱内,docker集装箱可以存放二进制文件和所需的库文件。 但是数据库呢?
- 如果我有一个现有的60 GB的SQL Server数据库与复制和BI,我需要移动一个容器内的所有数据? 还是只有数据库架构?
- 集成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,并且应该很好地支持您的用例,但确实需要一些脚本来完成工作。
- 如何使用命令行使用凭据连接到Docker容器?
- 为什么要将数据容器从数据库容器中分离出来比把数据容量从磁盘中分离出来要好呢?
- docker托pipe的数据库以某种方式免于备份最佳实践?
- tns:listener:所有适当的实例使用docker和DBVis阻塞新的连接
- Django – 默认端口0而不是3306 – 无法连接到“127.0.0.1”(61)上的MySQL服务器
- docker组合服务的集中configuration
- Django与Docker错误 – “无法连接到'127.0.0.1'(111)上的MySQL服务器”)
- 如何从简单的泊坞窗pipe理多个数据库模式?
- 如何从一个数据库(远程安装)加载db2转储数据到基于docker的数据库