Docker MySQL 持久化
引言
在容器化的世界中,Docker 是最为流行和广泛使用的容器平台之一。它提供了一种轻量级、可移植和可扩展的解决方案,使得开发人员和运维人员能够更加方便地构建、部署和管理应用程序。然而,由于容器的特性,如随时创建和销毁的能力,使得容器中的数据往往是非持久化的。在本文中,我们将探讨如何通过 Docker 来实现 MySQL 数据的持久化。
Docker Volume
Docker 提供了一种称为 Volume 的机制,用于在容器和主机之间共享和存储数据。Volume 是 Docker 中的一种特殊目录,可以存在于容器的文件系统中,也可以存在于宿主机的文件系统中。通过 Volume,我们可以实现容器中数据的持久化存储。
在 Docker 中创建一个 Volume 很简单,可以使用以下的命令:
docker volume create myvolume
这里我们创建了一个名为 myvolume
的 Volume。创建好 Volume 后,我们可以将其挂载到容器中的特定路径,以实现数据的持久化。
持久化 MySQL 数据
在使用 Docker 来运行 MySQL 时,默认情况下,MySQL 的数据是存储在容器的文件系统中的,也就是说,当容器被删除或重新创建时,数据也会丢失。为了实现 MySQL 数据的持久化,我们需要将 MySQL 的数据存储到一个 Volume 中。
创建一个 Volume
首先,我们需要创建一个 Volume 来存储 MySQL 的数据。可以使用以下命令来创建一个名为 mysql_data
的 Volume:
docker volume create mysql_data
启动 MySQL 容器
接下来,我们可以使用以下的命令来启动一个 MySQL 容器,并将 Volume 挂载到容器中的 /var/lib/mysql
路径:
docker run -d -p 3306:3306 -v mysql_data:/var/lib/mysql --name mymysql -e MYSQL_ROOT_PASSWORD=password mysql:latest
在上述命令中,我们使用了 -v
参数来将 Volume mysql_data
挂载到容器中的 /var/lib/mysql
路径。这样,MySQL 的数据就会存储在 Volume 中,而不是容器的文件系统中。
数据持久化测试
现在,我们可以测试一下数据的持久化。首先,我们可以通过以下命令进入到 MySQL 容器中:
docker exec -it mymysql bash
然后,我们可以使用以下命令登录到 MySQL 服务器:
mysql -uroot -ppassword
在 MySQL 中,我们可以创建一个数据库和一张表,并插入一些数据,如下所示:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE user (id INT, name VARCHAR(20));
INSERT INTO user (id, name) VALUES (1, 'John');
然后,我们可以退出 MySQL 容器,并停止并删除该容器:
exit
docker stop mymysql
docker rm mymysql
接下来,我们可以重新启动一个新的 MySQL 容器,并将 Volume mysql_data
再次挂载到容器中的 /var/lib/mysql
路径:
docker run -d -p 3306:3306 -v mysql_data:/var/lib/mysql --name mymysql -e MYSQL_ROOT_PASSWORD=password mysql:latest
然后,我们可以再次进入到 MySQL 容器中,并登录到 MySQL 服务器:
docker exec -it mymysql bash
mysql -uroot -ppassword
在 MySQL 中,我们可以使用以下命令查询之前创建的数据库和表的数据:
USE testdb;
SELECT * FROM user;
如果我们能够看到之前插入的数据,那么说明数据已经成功地持久化了。
序列图
sequenceDiagram
participant User
participant Docker
participant Host
participant MySQL
User->>Docker: 创建 Volume
Docker->>Host: 创建 Volume
User->>Docker: 启动 MySQL 容器
Docker->>Host: 挂载 Volume
Docker