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