您当前的位置:首页 > 互联网教程

涛思数据库docker删除容器后,宿主机中数据不能用

发布时间:2025-05-21 20:20:17    发布人:远客网络

涛思数据库docker删除容器后,宿主机中数据不能用

一、涛思数据库docker删除容器后,宿主机中数据不能用

1、该情况是因为容器删除时也删除了存储数据的文件。

2、当使用Docker删除容器时,通常会同时删除该容器中的所有数据。这是因为容器是一个轻量级的虚拟化环境,在宿主机上使用文件系统的层级结构来存储数据。

3、如果要保留宿主机上的数据,在创建容器时,可以使用数据卷来将容器中的数据存储在宿主机上的指定位置。这样,即使删除容器,数据卷中的数据仍然会保留在宿主机上。

二、数据库真的不适合Docker及容器化吗

即使你要把Docker数据放在主机来存储,它依然不能保证不丢数据。Dockervolumes的设计围绕UnionFS镜像层提供持久存储,但它仍然缺乏保证。

使用当前的存储驱动程序,Docker仍然存在不可靠的风险。如果容器崩溃并数据库未正确关闭,则可能会损坏数据。

常看到DBMS容器和其他服务运行在同一主机上。然而这些服务对硬件要求是非常不同的。

数据库(特别是关系型数据库)对IO的要求较高。一般数据库引擎为了避免并发资源竞争而使用专用环境。如果将你的数据库放在容器中,那么将浪费你的项目的资源。因为你需要为该实例配置大量额外的资源。在公有云,当你需要34G内存时,你启动的实例却必须开64G内存。在实践中,这些资源并未完全使用。

三、Docker容器启动时初始化Mysql数据库

在Docker中部署Spring Boot应用,并集成Mysql数据库,需要解决容器启动时自动初始化数据库的问题。本文将探讨两种传统方案与一种高效解决方案。传统方案包括在容器启动后手动导入SQL脚本或依赖客户端能力在连接时初始化,但这些方法效率低下且不够灵活。本文推荐利用Docker容器特性,在容器启动时自动执行初始化脚本。

具体实现原理在于,Mysql容器在启动时,会自动扫描`/docker-entrypoint-initdb.d`目录下的.sh、.sql、.sql.gz文件。这些文件将按照字母顺序依次执行,用于初始化数据库。默认情况下,初始化操作会在指定的数据库中执行,例如启动命令中可以指定`MYSQL_DATABASE`变量为`REGION_DB`。如果未指定数据库,则需在数据库DDL脚本中明确声明,否则会导致初始化操作失败。

为实现这一功能,本文提供自定义Dockerfile的示例,以下以Mysql:5.7版本为例。编写Dockerfile时需确保与所使用的Mysql版本兼容,具体操作参考官方文档。Dockerfile内容包括安装所需依赖、配置参数,以及执行初始化脚本。

构建自定义Mysql镜像的命令如下,可根据实际需求调整参数,如密码、持久化目录等。启动容器时,通过构建的镜像启动容器,指定数据库名称和根用户密码,同时将数据持久化到宿主机目录。

在实际部署中,记得检查字符集是否设置为utf8mb4,以及时区是否设置为东八区。这些配置有助于确保数据库能正确处理中文字符和时间格式。

通过自定义Docker镜像,实现Docker容器启动时自动初始化Mysql数据库,极大地简化了部署流程,提高了开发效率。此方法不仅适用于Mysql数据库,同样可以应用于其他Docker容器,只需根据实际需求调整Dockerfile内容即可。