背景
Docker 提供了一个轻量级的容器化解决方案,能够帮助我们快速构建、发布和运行应用程序。在前端开发中,我们经常使用 Docker 容器来搭建本地开发环境以及测试环境。但是在使用 Docker 启动 MySQL 时,有时会出现问题:我们在容器中创建的数据库和表没有被保存下来。
这是由于容器的存储机制导致的。Docker 容器提供了一个文件系统来保存容器内的数据,但是该文件系统是暂时性的,当容器重新启动时,之前保存的数据就会丢失。
下面我们将介绍两种解决方案,帮助你在 Docker 容器中永久保存 MySQL 数据,避免数据丢失。
解决方案一:使用 Docker 数据卷
Docker 数据卷是一个可在容器间共享或重用的文件或目录。它可以解决容器中数据存储的问题,使数据持久化。在 MySQL 容器中,我们可以使用数据卷挂载容器内的数据目录,将数据存储到宿主机上,从而实现数据永久化。
步骤一:创建数据卷
使用以下命令创建一个数据卷:
$ docker volume create mysql_data
步骤二:使用数据卷启动 MySQL 容器
使用以下命令启动 MySQL 容器,并把数据卷挂载到容器中:
$ docker run -d \ --name mysql \ -v mysql_data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ mysql:latest
步骤三:测试 MySQL 数据是否能够永久保存
在容器中创建数据库和表,然后停止并删除容器。再次启动容器,并检查之前创建的数据库和表是否还存在。如果你能看到之前创建的数据,那么数据持久化工作成功。
解决方案二:自定义 MySQL 镜像
使用自定义的 MySQL 镜像能够更加灵活地管理 MySQL 数据库。我们可以在自定义镜像中使用 Dockerfile 指令将数据存储到镜像中,实现数据永久保存。
步骤一:创建 Dockerfile
首先,我们需要在本地创建一个 Dockerfile 文件。Dockerfile 文件中包含了一系列指令,用于定义构建镜像的过程。
在 Dockerfile 文件中,我们可以指定 MySQL 配置文件、创建数据库和表等操作。而且,由于我们将数据存储在镜像中,所以这些操作只需要在构建镜像的过程中执行一次即可。
-- -------------------- ---- ------- ---- --------- - ----- ----- ---------- ---- ---------- ---------------------------------- - ------ ------- ------------ ----- -- --- -------------- ------- ---- ------------- ----------------------------
步骤二:构建自定义 MySQL 镜像
使用以下命令构建自定义 MySQL 镜像:
$ docker build -t my-mysql .
步骤三:启动自定义 MySQL 容器
使用以下命令启动容器:
$ docker run -d \ --name mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ my-mysql:latest
步骤四:测试 MySQL 数据是否能够永久保存
在容器中创建数据库和表,然后停止并删除容器。再次启动容器,并检查之前创建的数据库和表是否还存在。如果你能看到之前创建的数据,那么数据持久化工作成功。
总结
在 Docker 容器中永久保存 MySQL 数据的两种解决方案各有优劣。使用数据卷更加简单方便,可以在容器重启时自动挂载数据卷,而自定义 MySQL 镜像更加灵活,可以快速应对不同的需求。无论你选择哪种方案,都可以有效避免数据丢失问题,提高前端开发效率。
以上就是 Docker 容器中 MySQL 数据无法保存的解决方案。希望对大家有所帮助。下面附上示例代码和配置文件:
-- example.sql CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, PRIMARY KEY (id) );
# mysqld.cnf [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
参考文献:
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ec383af6b2d6eab367bafd