docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker mysql镜像

Docker中mysql镜像保存与导入的方法详解

作者:my向阳而生

Docker 的 MySQL 镜像保存通常有两种场景:一种是保存镜像本身的修改(如配置、初始化数据),另一种是持久化保存容器运行时产生的数据(如数据库表、用户数据),这篇文章主要介绍了Docker中mysql镜像保存与导入的方法详解,需要的朋友可以参考下

一、Docker中mysql镜像保存

Docker 的 MySQL 镜像保存通常有两种场景:一种是保存镜像本身的修改(如配置、初始化数据),另一种是持久化保存容器运行时产生的数据(如数据库表、用户数据)。以下是具体方法:

方法 1:保存镜像修改(通过 docker commit)

如果修改了容器内的配置或希望保存初始化数据,可以将容器提交为新的镜像:

# 1. 停止 MySQL 容器
docker stop <container_name>
# 2. 提交容器为新的镜像
docker commit <container_name> my-mysql-custom
# 3. 保存镜像为 .tar 文件(可选,用于迁移或备份)
docker save my-mysql-custom > my-mysql-custom.tar

注意事项:

方法 2:持久化数据(使用 Docker Volumes)

MySQL 的官方镜像默认将数据存储在容器内的 /var/lib/mysql。为了永久保存数据,需通过**卷(Volume)绑定挂载(Bind Mount)**将数据映射到宿主机。

方案 1:使用 Docker Volume

# 1. 创建 Volume
docker volume create mysql_data
# 2. 启动容器时挂载 Volume
docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -v mysql_data:/var/lib/mysql \
  mysql:tag
# 数据会永久保存在 Volume 中

方案 2:使用宿主机目录(Bind Mount)

# 1. 创建宿主机目录
mkdir -p /host/path/mysql/data
# 2. 启动容器时绑定目录
docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -v /host/path/mysql/data:/var/lib/mysql \
  mysql:tag
# 数据会永久保存在宿主机的 /host/path/mysql/data 目录

如何备份数据?

# 直接备份 Volume 或绑定目录的内容
cp -r /host/path/mysql/data /backup/mysql-data

方法 3:导出数据库内容(通过 mysqldump)

即使不保存镜像或卷,也可以通过 SQL 导出数据:

# 1. 导出数据库到 SQL 文件
docker exec mysql-container \
  mysqldump -u root -p"your_password" --all-databases > backup.sql
# 2. 恢复数据到新容器
cat backup.sql | docker exec -i new-mysql-container \
  mysql -u root -p"your_password"

总结

场景推荐方法
保存镜像配置docker commit + docker save
持久化动态数据Volume 或 Bind Mount
迁移或备份数据库mysqldump 导出 SQL

关键原则:

二、导入保存的Mysql镜像

以下是导入已保存的 MySQL 镜像及其数据的完整方法,具体取决于你之前保存镜像或数据的方式:

场景 1:导入通过 docker save 保存的镜像文件(.tar格式)

如果镜像通过 docker save 导出为 .tar 文件(如 my-mysql-custom.tar),按以下步骤导入:

步骤:

# 1. 导入镜像到本地 Docker
docker load -i my-mysql-custom.tar
# 2. 查看是否导入成功
docker images
# 应看到名为 `my-mysql-custom` 的镜像
# 3. 运行容器(注意挂载数据卷)
docker run -d \
  --name mysql-restored \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -v mysql_data:/var/lib/mysql \  # 挂载 Volume 确保数据持久化
  my-mysql-custom

关键说明:

场景 2:直接使用已存在的自定义镜像(无需 .tar 文件)

如果镜像已存在于本地(如通过 docker commit 生成),直接运行即可:

# 直接启动容器(挂载 Volume)
docker run -d \
  --name mysql-custom \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -v mysql_data:/var/lib/mysql \
  my-mysql-custom  # 镜像名称

场景 3:恢复通过 mysqldump 导出的 SQL 数据

如果数据通过 mysqldump 导出为 .sql 文件(如 backup.sql),需先启动新容器,再导入数据:

步骤:

# 1. 启动一个全新的 MySQL 容器(挂载 Volume)
docker run -d \
  --name mysql-new \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -v mysql_data:/var/lib/mysql \
  mysql:tag
# 2. 将 SQL 文件导入到容器
cat backup.sql | docker exec -i mysql-new \
  mysql -u root -p"your_password"
# 或手动进入容器执行
docker exec -it mysql-new mysql -u root -p
# 进入 MySQL Shell 后运行 `source backup.sql`

场景 4:恢复 Volume 或绑定目录的数据

如果数据已通过 Volume宿主机目录 持久化,只需挂载原数据路径即可:

方法 1:使用原有 Volume

# 直接挂载原有 Volume(假设 Volume 名称为 `mysql_data`)
docker run -d \
  --name mysql-restored \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -v mysql_data:/var/lib/mysql \
  mysql:tag  # 可使用原镜像或新镜像

方法 2:使用宿主机备份目录

# 假设备份数据在宿主机的 `/backup/mysql-data` 目录
docker run -d \
  --name mysql-restored \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -v /backup/mysql-data:/var/lib/mysql \
  mysql:tag

总结:根据需求选择恢复方式

场景推荐方法
保存镜像配置docker commit + docker save
持久化动态数据VolumeBind Mount
迁移或备份数据库mysqldump 导出 SQL

注意事项:

到此这篇关于Docker中mysql镜像保存与导入的文章就介绍到这了,更多相关docker mysql镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文