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