Docker镜像是只读的。当我们从映像实例化容器时,容器中托管的进程能够在磁盘上写入,但这些更改不会在容器重新启动后继续存在。有很多docker容器托管数据库服务,如Sql Server: https://hub.docker.com/r/microsoft/mssql-server-windows/
Docker镜像的只读性质是否会破坏持久数据库的目的?我看错了什么?
顺便说一句,我看到自动化测试中这种只读性质的可用性很高(不需要回滚),但这不是数据库的主要用途。
答案 0 :(得分:1)
如果您希望在重新启动容器后仍然存在持久数据,则可以使用卷来存储数据。
MySQL镜像使用/var/lib/mysql
目录存储" live"数据库的数据。如果将此文件夹映射到Docker卷,它将在重新启动和删除容器后继续存在 - 除非您还删除该卷。 MS SQL映像可能有一个类似的目录,可以映射到卷以使数据持久。
你是对的,默认行为是不耐用的(非常适合一次性测试),但是如果你想让它存活下来,你可以使用卷。
答案 1 :(得分:1)
有两种方法可以在容器中支持SQL Server数据库。使用ADDDB会将数据库复制到容器专用文件系统中,只要不删除容器,此数据库就可以保留。当容器停止时,数据库将停止,并在容器启动时重新连接。但是,当删除容器时,它将丢失。另一种方法是使用MOUNTDB,它使用本地主机或远程数据库将数据库安装到容器。在这种情况下,如果删除容器,文件将保持不变。