2016-11-23 23 views
1

码头图像是只读的。当我们通过映像实例化一个容器时,托管在容器中的进程能够在磁盘上写入,但这些更改无法在容器重启之后存活。有很多Docker容器托管像Sql Server这样的数据库服务: https://hub.docker.com/r/microsoft/mssql-server-windows/码头集装箱数据库 - 只读图像vs耐用性

不是Docker镜像的只读本质是否会打败持久数据库的目的?我看到什么错误?

顺便说一下,我在自动化测试中看到了这种只读本质的很好的可用性(不需要回滚),但这不是db的主要用途。

+0

泊坞窗图像不是只读的。它们可以用''docker build'''或'''docker commit'''来修改。 Docker容器可以存储数据,如果你不移除它的容器,数据可以存活。 – Tuan

+0

谢谢Tuan。请纠正我,如果我错了,但'码头建设'和'码头提交'是“设计时间”的变化,而数据库提交是“运行时”的变化。显然,我对后者感兴趣。 – user256890

回答

1

如果您想要在您的容器重新启动后仍然存在的持久数据,则可以使用来存储数据。

MySQL映像使用/var/lib/mysql目录来存储数据库的“实时”数据。如果将此文件夹映射到Docker卷,它将在重新启动和删除容器后继续存在 - 除非您还删除了该卷。 MS SQL映像可能有一个类似的目录,可将其映射到卷以使数据持久。

你是对的,默认行为是不持久(非常适合一次性测试),但如果你想让它存活下来,你可以使用卷。

1

在容器中支持SQL Server数据库有两种方法。使用ADDDB将把数据库复制到容器专用文件系统中,只要该容器没有被删除,该数据库就可以保留。数据库将在容器停止时停止,并在容器启动时重新挂接。但是,当容器被删除时,它会丢失。另一种方法是使用MOUNTDB,它使用本地主机或远程将数据库装载到容器。在这种情况下,如果容器被删除,该文件仍然存在。